在Linux系统中,如何通过C++编程创建和同步多个线程,并确保共享变量访问的安全性?请提供实现的代码示例。
时间: 2024-12-07 10:26:34 浏览: 3
要创建和同步多个线程,并确保共享变量访问的安全性,可以利用C++11提供的线程库,特别是互斥量(mutex)和条件变量(condition_variable)。互斥量用于保护共享资源不被多个线程同时访问,条件变量则用于线程间的同步。
参考资源链接:[华工操作系统实验:进程与线程同步探索](https://wenku.csdn.net/doc/3fraxh9gc1?spm=1055.2569.3001.10343)
首先,我们需要包含C++线程库的头文件,并定义共享变量以及用于保护该变量的互斥量:
```cpp
#include <iostream>
#include <thread>
#include <mutex>
#include <condition_variable>
#include <chrono>
int shared_var = 0;
std::mutex mtx;
std::condition_variable cv;
```
接下来,定义一个函数来模拟线程的工作,例如让线程对共享变量进行递增或递减操作:
```cpp
void increment(int n) {
for (int i = 0; i < n; ++i) {
std::this_thread::sleep_for(std::chrono::milliseconds(10)); // 模拟耗时操作
std::unique_lock<std::mutex> lock(mtx); // 独占访问互斥量
++shared_var;
cv.notify_one(); // 增加后通知一个等待的线程
}
}
void decrement(int n) {
for (int i = 0; i < n; ++i) {
std::this_thread::sleep_for(std::chrono::milliseconds(10)); // 模拟耗时操作
std::unique_lock<std::mutex> lock(mtx); // 独占访问互斥量
--shared_var;
cv.notify_one(); // 减少后通知一个等待的线程
}
}
```
在主线程中,创建两个线程,并在适当的时候进行等待,确保线程执行完毕:
```cpp
int main() {
std::thread t1(increment, 10);
std::thread t2(decrement, 10);
// 使用条件变量等待两个线程完成
std::unique_lock<std::mutex> lock(mtx);
cv.wait(lock, [] { return shared_var == 0; }); // 等待条件成立
t1.join();
t2.join();
std::cout <<
参考资源链接:[华工操作系统实验:进程与线程同步探索](https://wenku.csdn.net/doc/3fraxh9gc1?spm=1055.2569.3001.10343)
阅读全文