gh-133296: Publicly expose critical section API that accepts PyMutex#135899
gh-133296: Publicly expose critical section API that accepts PyMutex#135899colesbury merged 6 commits intopython:mainpython/cpython:mainfrom ngoldbaum:expose-critical-section-begin-mutex-gh-133296ngoldbaum/cpython:expose-critical-section-begin-mutex-gh-133296Copy head branch name to clipboard
Conversation
colesbury
left a comment
There was a problem hiding this comment.
Looks good. Some small clarifications that the macros take PyMutex* as opposed to PyMutex.
Co-authored-by: Sam Gross <colesbury@gmail.com>
Misc/NEWS.d/next/C_API/2025-06-24-11-10-01.gh-issue-133296.lIEuVJ.rst
Outdated
Show resolved
Hide resolved
|
The C API workgroup vote now shows unanimous approval for adding this: capi-workgroup/decisions#67 (comment) |
|
Thanks @ngoldbaum for the PR, and @colesbury for merging it 🌮🎉.. I'm working now to backport this PR to: 3.14. |
…Mutex (pythongh-135899) This makes the following APIs public: * `Py_BEGIN_CRITICAL_SECTION_MUTEX(mutex),` * `Py_BEGIN_CRITICAL_SECTION2_MUTEX(mutex1, mutex2)` * `void PyCriticalSection_BeginMutex(PyCriticalSection *c, PyMutex *mutex)` * `void PyCriticalSection2_BeginMutex(PyCriticalSection2 *c, PyMutex *mutex1, PyMutex *mutex2)` The macros are identical to the corresponding `Py_BEGIN_CRITICAL_SECTION` and `Py_BEGIN_CRITICAL_SECTION2` macros (e.g., they include braces), but they accept a `PyMutex` instead of an object. The new macros are still paired with the existing END macros (`Py_END_CRITICAL_SECTION`, `Py_END_CRITICAL_SECTION2`). (cherry picked from commit 89c220b) Co-authored-by: Nathan Goldbaum <nathan.goldbaum@gmail.com>
|
GH-136969 is a backport of this pull request to the 3.14 branch. |
Sure, here's 3.14 backports:
In the backports, I adjusted the And we'll need a follow-up to update these in |
This doesn't sound unanimous to me: I'll be honest I don't quite get the point of a critical section that doesn't actually exclude other threads from running the same code, but I don't have energy to argue about it right now. I agree with Steve. Calling something a "critical section", when it isn't, seems badly misleading. |
Based on python/cpython#135899 this'll be supported in 3.14 (and can be backported to 3.13 fairly easily).
Based on python/cpython#135899 this'll be supported in 3.14 (and can be backported to 3.13 fairly easily).
…Mutex (pythongh-135899) This makes the following APIs public: * `Py_BEGIN_CRITICAL_SECTION_MUTEX(mutex),` * `Py_BEGIN_CRITICAL_SECTION2_MUTEX(mutex1, mutex2)` * `void PyCriticalSection_BeginMutex(PyCriticalSection *c, PyMutex *mutex)` * `void PyCriticalSection2_BeginMutex(PyCriticalSection2 *c, PyMutex *mutex1, PyMutex *mutex2)` The macros are identical to the corresponding `Py_BEGIN_CRITICAL_SECTION` and `Py_BEGIN_CRITICAL_SECTION2` macros (e.g., they include braces), but they accept a `PyMutex` instead of an object. The new macros are still paired with the existing END macros (`Py_END_CRITICAL_SECTION`, `Py_END_CRITICAL_SECTION2`).
…Mutex (pythongh-135899) This makes the following APIs public: * `Py_BEGIN_CRITICAL_SECTION_MUTEX(mutex),` * `Py_BEGIN_CRITICAL_SECTION2_MUTEX(mutex1, mutex2)` * `void PyCriticalSection_BeginMutex(PyCriticalSection *c, PyMutex *mutex)` * `void PyCriticalSection2_BeginMutex(PyCriticalSection2 *c, PyMutex *mutex1, PyMutex *mutex2)` The macros are identical to the corresponding `Py_BEGIN_CRITICAL_SECTION` and `Py_BEGIN_CRITICAL_SECTION2` macros (e.g., they include braces), but they accept a `PyMutex` instead of an object. The new macros are still paired with the existing END macros (`Py_END_CRITICAL_SECTION`, `Py_END_CRITICAL_SECTION2`).
…epts PyMutex (pythongh-135899) (python#136969) Co-authored-by: Nathan Goldbaum <nathan.goldbaum@gmail.com> Co-authored-by: Hugo van Kemenade <1324225+hugovk@users.noreply.github.com>
xref gh-133296
See capi-workgroup/decisions#67 for a detailed proposal and vote from the C API workgroup.
I tagged this to be added for 3.15 but maybe @hugovk is willing to grant an exception so this lands in 3.14, since it's pretty straightforward and is new API so it shouldn't break anyone.
Docs preview: https://cpython-previews--135899.org.readthedocs.build/en/135899/c-api/init.html#python-critical-section-api