Mutex

继承: RefCounted < Object

二元 Semaphore,用于在多 Thread 间进行同步。

描述

同步互斥器(mutex 来源于 mutual exclusion,即互斥)。可用于在多 Thread 间进行同步,等价于二元 Semaphore。能够确保同时只有一个线程能够访问临界区。

这是一种可重入的互斥器,也就是说同一个线程能够将其多次上锁,只要也进行相同次数的解锁即可。

警告:互斥器必须谨慎使用才能避免死锁。

警告:为了能够正确清理,避免崩溃和死锁,必须满足以下条件:

  • Mutex 的引用计数到达零,将被销毁时,必须没有线程将其锁定(包括发生析构的线程)。

  • Thread 的引用计数达到零,将被销毁时,必须没有锁定任何互斥器。

教程

方法

void

lock()

bool

try_lock()

void

unlock()


方法说明

void lock() 🔗

锁定此 Mutex,直到被当前所有者解锁为止。

注意:如果线程已经拥有互斥锁的所有权,该函数将无阻塞地返回。


bool try_lock() 🔗

尝试锁定该 Mutex,但不会阻塞。成功时返回 true,否则返回 false

注意:如果该线程已经拥有了该互斥器的所有权,则函数返回 true


void unlock() 🔗

解锁该 Mutex,将其留给其他线程。

注意:如果一个线程在已经拥有互斥器的情况下多次调用 locktry_lock,则也必须调用相同次数的 unlock 才能正确解锁。

警告:在给定的线程中调用 unlock 的次数超过调用 lock 的次数,导致尝试解锁未加锁的互斥器,是错误的行为,可能引起崩溃和死锁。