File tree Expand file tree Collapse file tree
Lib/test/test_free_threading Expand file tree Collapse file tree Original file line number Diff line number Diff line change @@ -148,6 +148,36 @@ def read_set():
148148 for t in threads :
149149 t .join ()
150150
151+ def test_pop_concurrent (self ):
152+ """Test set.pop() from several threads."""
153+ NUM_THREADS = 4
154+ NUM_ITERS = 20
155+
156+ for _ in range (NUM_ITERS ):
157+ items = set (range (self .SET_SIZE ))
158+ s = set (items )
159+ barrier = Barrier (NUM_THREADS , timeout = 2 )
160+ popped = [[] for _ in range (NUM_THREADS )]
161+
162+ def pop_set (out ):
163+ barrier .wait ()
164+ while True :
165+ try :
166+ out .append (s .pop ())
167+ except KeyError :
168+ break
169+
170+ threads = [Thread (target = pop_set , args = (out ,)) for out in popped ]
171+ for t in threads :
172+ t .start ()
173+ for t in threads :
174+ t .join ()
175+
176+ all_popped = [item for out in popped for item in out ]
177+ self .assertEqual (len (all_popped ), len (items ))
178+ self .assertEqual (set (all_popped ), items )
179+ self .assertEqual (len (s ), 0 )
180+
151181
152182@threading_helper .requires_working_threading ()
153183class SmallSetTest (RaceTestBase , unittest .TestCase ):
You can’t perform that action at this time.
0 commit comments