学习Mutex首先需要了解互斥锁的概念,详情见之前的文章。
Mutex类就是C++中实现互斥锁的类,互斥锁有可重入和不可重入之分:
mutex是不可重入的互斥锁,recursive_mutex是可重入的互斥锁;
加上上锁时间的限定后,就有了另外两个互斥锁:mutex_timed, recursive_timed_mutex,分别是可重入/不可重入的互斥锁。
互斥锁的操作有:
上锁 lock 如果mutex未上锁,则将其上锁。否则如果已经其它线程lock,则阻塞当前线程。
上锁 try_lock 如果mutex未上锁,则将其上锁。否则返回false,并不阻塞当前线程。
解锁 unlock 如果mutex被当前线程锁住,则将其解锁。否则,是未定义的行为。
timed_mutex会多这么两种操作:
try_lock_for(duration) 如果timed_mutex未上锁,则将其上锁,否则阻塞当前线程,但最长只阻塞duration表示的时间段。
try_lock_until(time_point) 如果timed_mutex未上锁,则将其上锁,否则阻塞当前线程,但最长只会阻塞到time_point表示的时间点就不再阻塞。
try_lock_for/until可以检测到死锁的出现,这是目前想到的一种用途。