mirror of
https://github.com/python/cpython.git
synced 2025-11-03 03:22:27 +00:00
gh-99113: Share the GIL via PyInterpreterState.ceval.gil (gh-104203)
In preparation for a per-interpreter GIL, we add PyInterpreterState.ceval.gil, set it to the shared GIL for each interpreter, and use that rather than using _PyRuntime.ceval.gil directly. Note that _PyRuntime.ceval.gil is still the actual GIL.
This commit is contained in:
parent
d00d942149
commit
55671fe047
5 changed files with 65 additions and 40 deletions
|
|
@ -96,7 +96,7 @@ _PyEval_Vector(PyThreadState *tstate,
|
|||
PyObject* const* args, size_t argcount,
|
||||
PyObject *kwnames);
|
||||
|
||||
extern int _PyEval_ThreadsInitialized(struct pyruntimestate *runtime);
|
||||
extern int _PyEval_ThreadsInitialized(void);
|
||||
extern PyStatus _PyEval_InitGIL(PyThreadState *tstate);
|
||||
extern void _PyEval_FiniGIL(PyInterpreterState *interp);
|
||||
|
||||
|
|
|
|||
|
|
@ -49,6 +49,8 @@ struct _ceval_runtime_state {
|
|||
the main thread of the main interpreter can handle signals: see
|
||||
_Py_ThreadCanHandleSignals(). */
|
||||
_Py_atomic_int signals_pending;
|
||||
|
||||
/* This is (only) used indirectly through PyInterpreterState.ceval.gil. */
|
||||
struct _gil_runtime_state gil;
|
||||
};
|
||||
|
||||
|
|
@ -83,6 +85,7 @@ struct _pending_calls {
|
|||
|
||||
struct _ceval_state {
|
||||
int recursion_limit;
|
||||
struct _gil_runtime_state *gil;
|
||||
/* This single variable consolidates all requests to break out of
|
||||
the fast path in the eval loop. */
|
||||
_Py_atomic_int eval_breaker;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue