使用C++使用2个线程,分别给全局整型数组的前后各一半元素随机赋值
时间: 2024-10-15 10:16:25 浏览: 36
在C++中,你可以使用`<thread>`库来创建并管理线程,并通过互斥量(mutex)保证多线程环境下对共享数据(全局整型数组)的操作安全。这里是一个简单的示例,展示了如何创建两个线程,分别处理数组的前后半部分:
```cpp
#include <iostream>
#include <thread>
#include <vector>
#include <random> // C++11引入的用于生成随机数的头文件
#include <mutex> // 用于同步互斥访问
// 全局整型数组
std::vector<int> global_array(size_t array_size);
// 互斥量
std::mutex mtx;
// 给数组前半部分随机赋值的函数
void fill_half_front() {
std::random_device rd; // 获取随机数种子
std::mt19937 gen(rd()); // 创建Mersenne Twister引擎
for (size_t i = 0; i < array_size / 2; ++i) {
std::lock_guard<std::mutex> lock(mtx); // 加锁
global_array[i] = rand_between(0, 100); // 随机范围内的值
}
}
// 同理,给数组后半部分随机赋值的函数
void fill_half_back() {
// ...类似前半部分的代码,只是操作的索引范围是array_size / 2 到 array_size - 1
}
int main() {
size_t array_size = 10; // 具体的数组大小
std::thread thread1(fill_half_front);
std::thread thread2(fill_half_back);
thread1.join(); // 等待第一个线程结束
thread2.join(); // 然后再等待第二个线程结束
return 0;
}
```
在这个例子中,`fill_half_front()` 和 `fill_half_back()` 函数会在各自的线程里运行,每个线程都会先获取互斥锁 (`std::lock_guard`) 来防止并发修改全局数组。`rand_between(0, 100)` 是一个假设的函数,你需要替换为你实际生成随机数的方式。
阅读全文