C++使用锁或者避免共享资源的例子
时间: 2024-04-30 18:18:10 浏览: 31
C++中使用锁或者避免共享资源的例子非常多,以下是其中两个例子:
1. 使用锁:
```c++
#include <iostream>
#include <thread>
#include <mutex>
using namespace std;
mutex mtx; // 定义一个互斥锁
void print_number(int num)
{
mtx.lock(); // 上锁
for (int i = 1; i <= num; ++i) {
cout << i << " ";
}
cout << endl;
mtx.unlock(); // 解锁
}
int main()
{
thread t1(print_number, 10);
thread t2(print_number, 10);
t1.join();
t2.join();
return 0;
}
```
上面的代码中,两个线程t1和t2都会执行print_number函数,打印出从1到10的数字。由于cout是一个共享资源,如果不使用锁进行同步,那么就可能会出现输出顺序错乱的情况。通过定义一个互斥锁,对cout进行加锁和解锁,可以保证输出的顺序正确。
2. 避免共享资源:
```c++
#include <iostream>
#include <thread>
using namespace std;
void print_number(int num)
{
for (int i = 1; i <= num; ++i) {
cout << i << " ";
}
cout << endl;
}
int main()
{
thread t1(print_number, 10);
thread t2(print_number, 10);
t1.join();
t2.join();
return 0;
}
```
上面的代码中,两个线程t1和t2都会执行print_number函数,打印出从1到10的数字。由于cout是一个共享资源,如果不使用锁进行同步,那么就可能会出现输出顺序错乱的情况。但是这里我们并没有使用锁,而是避免了共享资源,即每个线程都有自己的cout对象,不会出现竞争的情况,因此输出的顺序也是正确的。