Какие операции не являются атомарными по отношению к GIL? - PullRequest
3 голосов
/ 04 ноября 2019

Я понимаю, что из Python 3.2 GIL работает на основе времени 5 миллисекунд, а не 100 байт-кодов до переключения потоков. Однако если для операции требуется блокировка (должна быть атомарной), то она ожидает более 5 миллисекунд.

Я хочу знать, какие примеры операций являются атомарными по отношению к GIL (например, присваивание), не атомарный (например, увеличение) или выпуск GIL (например, чтение). Это поможет программисту знать, когда управлять блокировками вручную.

Пример: в какую категорию попадают циклы FOR / WHILE?

Итак, на основе приведенного выше списка программист должен реализоватьего собственные блокировки, чтобы гарантировать, что, например, неатомарная операция (приращение) не испортит значение глобальной переменной в многопоточной программе, потому что GIL блокирует только атомарную операцию.

...