Attention: Here be dragons
This is the latest
(unstable) version of this documentation, which may document features
not available in or compatible with released stable versions of Godot.
Checking the stable version of the documentation...
Mutex¶
Inherits: RefCounted < Object
二元 Semaphore,用于在多 Thread 间进行同步。
Description¶
同步互斥器(mutex 来源于 mutual exclusion,即互斥)。可用于在多 Thread 间进行同步,等价于二元 Semaphore。能够确保同时只有一个线程能够访问临界区。
这是一种可重入的互斥器,也就是说同一个线程能够将其多次上锁,只要也进行相同次数的解锁即可。
警告:互斥器必须谨慎使用才能避免死锁。
警告:为了能够正确清理,避免崩溃和死锁,必须满足以下条件:
Mutex 的引用计数到达零,将被销毁时,必须没有线程将其锁定(包括发生析构的线程)。
Thread 的引用计数达到零,将被销毁时,必须没有锁定任何互斥器。
Tutorials¶
Methods¶
void |
lock ( ) |
try_lock ( ) |
|
void |
unlock ( ) |
Method Descriptions¶
void lock ( )
锁定此 Mutex,直到被当前所有者解锁为止。
注意:如果线程已经拥有互斥锁的所有权,该函数将无阻塞地返回。
bool try_lock ( )
尝试锁定该 Mutex,但不会阻塞。成功时返回 true
,否则返回 false
。
注意:如果该线程已经拥有了该互斥器的所有权,则函数返回 true
。
void unlock ( )
解锁该 Mutex,将其留给其他线程。
注意:如果一个线程在已经拥有互斥器的情况下多次调用 lock 或 try_lock,则也必须调用相同次数的 unlock 才能正确解锁。
警告:在给定的线程中调用 unlock 的次数超过调用 lock 的次数,导致尝试解锁未加锁的互斥器,是错误的行为,可能引起崩溃和死锁。