0
点赞
收藏
分享

微信扫一扫

C++(11):mutex

忆北文学摄影爱好员 2022-05-04 阅读 71
c++

C++11提供几种形式的mutex,并对应的提供了如下接口:

mutex,是最基本的互斥类:

当前状态lock

try_lock

unlock
未被任何线程加锁调用线程将该mutex锁住,直到调用线程调用unlock释放锁调用线程将该mutex锁住,直到调用线程调用unlock释放锁未定义行为
已被其他线程加锁调用线程将被阻塞,直到其它线程unlock该mutex调用线程返回false,不会阻塞调用线程未定义行为
已被当前线程加锁死锁死锁调用线程释放锁

recursive_mutex,同一线程内可递归(重入)的互斥类:

当前状态locktry_lockunlock
未被任何线程加锁调用线程将该mutex锁住,直到调用线程调用unlock释放锁调用线程将该mutex锁住,直到调用线程调用unlock释放锁未定义行为
已被其他线程加锁调用线程将被阻塞,直到其它线程unlock该mutex调用线程返回false,不会阻塞调用线程未定义行为
已被当前线程加锁继续加锁继续加锁解锁次数与加锁次数相同后,调用线程释放锁

timed_mutex,带时限请求锁定能力的互斥类:

当前状态locktry_locktry_lock_fortry_lock_untilunlock
未被任何线程加锁调用线程将该mutex锁住,直到调用线程调用unlock释放锁调用线程将该mutex锁住,直到调用线程调用unlock释放锁调用线程将该mutex锁住,直到调用线程调用unlock释放锁调用线程将该mutex锁住,直到调用线程调用unlock释放锁未定义行为
已被其他线程加锁调用线程将被阻塞,直到其它线程unlock该mutex调用线程返回false,不会阻塞调用线程调用线程将被阻塞,不过最多只等待设定的时间长度,如果届时锁还未被其他线程释放,则该函数返回false,调用线程不会被继续阻塞调用线程将被阻塞,不过最多只等待到指定的时刻,如果届时锁还未被其他线程释放,则该函数返回false,调用线程不会被继续阻塞未定义行为
已被当前线程加锁死锁死锁死锁死锁调用线程释放锁

recursive_timed_mutex,同一线程内可递归(重入)的timed_mutex:

当前状态locktry_locktry_lock_fortry_lock_untilunlock
未被任何线程加锁调用线程将该mutex锁住,直到调用线程调用unlock释放锁调用线程将该mutex锁住,直到调用线程调用unlock释放锁调用线程将该mutex锁住,直到调用线程调用unlock释放锁调用线程将该mutex锁住,直到调用线程调用unlock释放锁未定义行为
已被其他线程加锁调用线程将被阻塞,直到其它线程unlock该mutex调用线程返回false,不会阻塞调用线程调用线程将被阻塞,不过最多只等待设定的时间长度,如果届时锁还未被其他线程释放,则该函数返回false,调用线程不会被继续阻塞调用线程将被阻塞,不过最多只等待到指定的时刻,如果届时锁还未被其他线程释放,则该函数返回false,调用线程不会被继续阻塞未定义行为
已被当前线程加锁继续加锁继续加锁继续加锁继续加锁解锁次数与加锁次数相同后,调用线程释放锁
举报

相关推荐

0 条评论