补全ThreadHandler函数中代码,使用互斥锁对position和buffer变量加锁,使其同一时刻只能被一个线程访问。
时间: 2024-03-20 07:44:51 浏览: 24
以下是可能的实现方式:
```c++
mutex mtx;
void* ThreadHandler(void* arg) {
int thread_id = *(int*)arg;
while (true) {
mtx.lock();
if (position >= buffer.size()) {
mtx.unlock();
break;
}
int val = buffer[position++];
mtx.unlock();
printf("Thread %d processing value %d\n", thread_id, val);
// do some work with val
}
return NULL;
}
```
在此实现中,使用 `std::mutex` 定义了一个互斥锁 `mtx`。在每次线程循环中,线程首先使用 `mtx.lock()` 获取互斥锁,然后检查 `position` 是否已经超出了 `buffer` 的范围。如果是,就说明所有元素都已经处理完毕,线程可以退出循环。否则,线程从 `buffer` 中读取下一个待处理的元素,并将 `position` 加 1。在读取完元素后,线程释放互斥锁,使其他线程可以继续访问 `position` 和 `buffer`。
需注意的是,在不同线程中访问共享变量时,需要使用互斥锁等机制来避免数据竞争和并发访问问题,从而确保程序的正确性和可靠性。