Skip to content

Commit ff1d60d

Browse files
committed
wip: lock-free set contains
1 parent 8421b64 commit ff1d60d

File tree

2 files changed

+332
-112
lines changed

2 files changed

+332
-112
lines changed

Lib/test/test_free_threading/test_set.py

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,37 @@ def repr_set():
3636
for set_repr in set_reprs:
3737
self.assertIn(set_repr, ("set()", "{1, 2, 3, 4, 5, 6, 7, 8}"))
3838

39+
def test_contains_mutate(self):
40+
"""Test set contains operation combined with mutation."""
41+
barrier = Barrier(2)
42+
s = set()
43+
done = False
44+
45+
def read_set():
46+
barrier.wait()
47+
while not done:
48+
for i in range(64):
49+
result = (i % 16) in s
50+
51+
def mutate_set():
52+
nonlocal done
53+
barrier.wait()
54+
for i in range(10):
55+
s.clear()
56+
for j in range(16):
57+
s.add(j)
58+
for j in range(16):
59+
s.discard(j)
60+
# executes the set_swap_bodies() function
61+
s.__iand__(set(k for k in range(10, 20)))
62+
done = True
63+
64+
threads = [Thread(target=read_set), Thread(target=mutate_set)]
65+
for t in threads:
66+
t.start()
67+
for t in threads:
68+
t.join()
69+
3970

4071
if __name__ == "__main__":
4172
unittest.main()

0 commit comments

Comments
 (0)