用c++编写程序: 1) 定义一个全局变量count,创建两个线程1和2; 2) 线程1读取全局变量count的值到局部变量a,局部变量a加10后重新赋值给count; 3)线程2读取全局变量count的值到局部变量b,局部变量b加20后重新赋值给count.
时间: 2024-10-09 12:09:14 浏览: 39
linux编程基础-线程的练习-实验四.docx
在 C++ 中,你可以使用 `<thread>` 头文件和互斥量(mutex)来实现这种线程同步操作,防止数据竞争。下面是一个简单的示例:
```cpp
#include <iostream>
#include <thread>
#include <mutex>
std::mutex mtx; // 创建互斥量
int count = 0; // 全局变量
void threadFunction1() {
std::lock_guard<std::mutex> lock(mtx); // 获取锁,保证原子操作
int a = count;
a += 10;
count = a; // 更新全局变量
std::cout << "Thread 1 updated count to: " << count << std::endl;
}
void threadFunction2() {
std::lock_guard<std::mutex> lock(mtx);
int b = count;
b += 20;
count = b; // 更新全局变量
std::cout << "Thread 2 updated count to: " << count << std::endl;
}
int main() {
std::thread t1(threadFunction1);
std::thread t2(threadFunction2);
t1.join(); // 等待线程1完成
t2.join(); // 等待线程2完成
return 0;
}
```
在这个例子中,我们用 `std::lock_guard` 来自动管理对 `mtx` 的锁定,确保在读写 `count` 时不会发生并发访问。每个线程都会先获取互斥量再更新 `count`,这样可以避免数据冲突。
阅读全文