GeezerVison is showing github.com — Make `set` thread-safe in `--disable-gil` builds · Issue #112069 · python/cpython
Make set thread-safe in --disable-gil builds #112069DescriptionFeature or enhancement
The set object is not currently thread-safe in --disable-gil builds. We should make it thread-safe by using the "critical section" API. to acquire the per-object locks around operations. There should be no effective change in the default build (i.e., with GIL) because critical sections are no-ops in the default build.
Notes:
- Unlike
dict and list, I don't think it's worth the complexity to try to "optimistically avoid locking" around any set operation (except set_len). We could consider doing this in the future if there is a performance justification, but not for 3.13.
set_len can avoid locking and instead use relaxed atomics for reading the "used" field. Note that writes to "used" should then also use relaxed atomics.
- Some operations require locking two containers (like
set_merge). Some of these will need refactorings so that the critical sections macros can be added in the correct places.
For context, here is the change from the nogil-3.12 fork: colesbury/nogil-3.12@4ca2924f0d. Note that the critical section API is slightly changed in 3.13 from nogil-3.12; In 3.13 Py_BEGIN_CRITICAL_SECTION takes a PyObject instead of a PyMutex.
TODO:
Linked PRs
Activitytomasr8 commented on Nov 16, 2023 Hi again! This one looks more challenging than the hashlib one but I'd like to try anyway :) Reacted by Sam Gross Reacted by Erlend E. Aasland colesbury commented on Nov 16, 2023 ContributorAuthor More actions DinoV commented on Jan 4, 2024 hi @tomasr8, just curious if you're still planning on working on this? tomasr8 commented on Jan 5, 2024 Hi! Yes, I took a break for Christmas but I have it almost working, just need to fix some tests. I could open a draft PR this weekend Reacted by Dino Viehland Reacted by Erlend E. Aasland corona10 commented on Apr 16, 2024 @colesbury I am going to work on _PySet_NextEntry this week, considering the caller-side usage. corona10 commented on Apr 25, 2024 @colesbury Now we can close the issue right? Or more thing is left? colesbury commented on Apr 25, 2024 ContributorAuthor More actions
MetadataMetadataDevelopmentNo branches or pull requestsIssue actions
|