mirror of
https://github.com/python/cpython.git
synced 2025-08-24 18:55:00 +00:00
gh-123358: Use _PyStackRef
in LOAD_DEREF
(gh-130064)
Concurrent accesses from multiple threads to the same `cell` object did not scale well in the free-threaded build. Use `_PyStackRef` and optimistically avoid locking to improve scaling. With the locks around cell reads gone, some of the free threading tests were prone to starvation: the readers were able to run in a tight loop and the writer threads weren't scheduled frequently enough to make timely progress. Adjust the tests to avoid this. Co-authored-by: Donghee Na <donghee.na@python.org>
This commit is contained in:
parent
1b8bb1ed0c
commit
3d4ac1a2c2
12 changed files with 90 additions and 44 deletions
|
@ -1822,12 +1822,11 @@ dummy_func(
|
|||
|
||||
inst(LOAD_DEREF, ( -- value)) {
|
||||
PyCellObject *cell = (PyCellObject *)PyStackRef_AsPyObjectBorrow(GETLOCAL(oparg));
|
||||
PyObject *value_o = PyCell_GetRef(cell);
|
||||
if (value_o == NULL) {
|
||||
value = _PyCell_GetStackRef(cell);
|
||||
if (PyStackRef_IsNull(value)) {
|
||||
_PyEval_FormatExcUnbound(tstate, _PyFrame_GetCode(frame), oparg);
|
||||
ERROR_IF(true, error);
|
||||
}
|
||||
value = PyStackRef_FromPyObjectSteal(value_o);
|
||||
}
|
||||
|
||||
inst(STORE_DEREF, (v --)) {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue