
mutex
用于同步机制,不可复制,不可移动
lock & unlock
1 |
mutex m; |
如果do_something过程中有异常,则不能正常解锁,可能会造成死锁现象,改进方法是在每个抛出异常时调用unlock.
try_lock
尝试获取锁,立即返回,成功为true,失败false.
1 |
mutex m; |
time_mutex
lock & un_lock & try_lock
方法同mutex.
try_lock_for & try_lock_until
-
尝试加锁,阻塞直到指定的timeout_duration或获得锁,成功返回true,失败false.
若timeout_duration小于等于timeout_duration.zero(),等同于try_lock().1
2
3
4
5
6
7
8
9
10
11time_mutex tm;
using MS = chrono::milliseconds;
while(true){
if(tm.try_lock_for(MS(100))){
//do_something_with_share_data
tm.unlock();
}
else{
//do_something_else
}
} -
尝试加锁,阻塞直到指定的timeout_time或获得锁,成功返回true,失败false.
当前时间若已经过timeout_time,等同于try_lock().1
2
3
4
5
6
7
8
9
10
11
12time_mutex tm;
using MS = chrono::seconds;
while(true){
auto NOW = chrono::steady_clock::now();
if(tm.try_lock_until(NOW + MS(100))){
//do_something_with_share_data
tm.unlock();
}
else{
//do_something_else
}
}
recursive_mutex & recursive_time_mutex
递归锁,暂时略过…
share_mutex & share_time_mutex
共享锁,暂时略过




近期评论