test.test_threading.ConditionTests.test_notify() tests the threading._Condition.
threading._Condition uses internally a threading._RLock.
threading._RLock uses an internal lock created with thread.allocate_lock().
thread.allocate_lock() calls internally PyThread_allocate_lock(). On my Linux (Fedora 25) and FreeBSD (FreeBSD 11 VM) machines, PyThread_allocate_lock() calls sem_init(): POSIX pthread semaphores.
In Python 3, RLock was implemented in C for speed (the new Python 3.0 io module was slow because of RLock performance): see bpo-3001.
I know at least one race condition in Python 2.7 RLock: bpo-13697, RLock bug with signals. |