Python threading.Condition.wait() 是否立即暂停执行?
如果我在 Python 的条件变量上调用 wait()
,那么调用这个方法的线程会暂停执行并让出控制权吗?还是说它会一直阻塞,直到下一个上下文切换发生?
2 个回答
1
wait() 方法会先释放锁,然后就会停下来,直到其他线程通过 notify() 或 notifyAll() 方法来唤醒它。被唤醒后,它会重新获取锁,然后继续执行。你还可以设置一个超时时间。
它会一直停着,直到条件被通知。
2
线程确实会让步。这个让步是因为使用了 pthread_cond_wait
这个函数,或者在 PyThread_acquire_lock
中的类似暂停机制。条件变量是通过系统调用来实现的,而Python使用的是本地线程,所以操作系统的调度器负责切换到另一个线程。
另外,在深入Python的内部调用之前, 全局解释器锁(GIL)会被释放。最后一个关键点是调用 threading.Condition.wait
来获取锁。