std::mutex 简单用法
std::mutex 是 c++ 里的一个互斥锁, 用于实现线程间的互斥访问,确保共享资源的安全性。在使用时,一旦 A 线程 lock 后,其他线程如果调用 lock 便会阻塞等待,直到 A 线程 unlock,其他线程如果不想阻塞等待,可以调用 try_lock, 它会尝试lock,失败后便返回。
示例
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
#include <mutex>
#include <iostream>
#include <thread>
#include <unistd.h>
std::mutex mtx;
int main() {
std::thread t1([](){
sleep(2); // 休眠2秒,让t2线程先拿到锁
while (true) {
mtx.lock(); // t2或者t3持有锁未解锁t1就会一直阻塞
std::cout<< "t1已上锁\n";
mtx.unlock();
std::cout<< "t1已解锁\n";
}
});
std::thread t2([](){
// 上锁后永远不解锁
mtx.lock();
while (true){
std::cout<< "t2已上锁\n";
sleep(1);
}
mtx.unlock();
});
std::thread t3([](){
while (true) {
// 尝试上锁,立刻返回,不阻塞,如果成功返回true,失败返回false
auto ret = mtx.try_lock();
if (ret) {
std::cout<< "t3已上锁\n";
mtx.unlock();
std::cout<< "t3已解锁\n";
} else {
std::cout<< "t3上锁失败\n";
}
sleep(1);
}
});
t1.join();
t2.join();
t3.join();
return 0;
}
本文由作者按照 CC BY 4.0 进行授权