一个vectoru会被多线程两个函数同时使用,如何使用mutex
时间: 2024-03-17 16:46:45 浏览: 200
在C++中,如果一个vector会被多个线程同时使用,就需要使用mutex来保护vector的访问。下面是一个使用mutex来保护vector访问的例子:
```cpp
#include <iostream>
#include <vector>
#include <thread>
#include <mutex>
std::vector<int> vec;
std::mutex mtx;
void push_thread() {
for (int i = 0; i < 10; i++) {
std::lock_guard<std::mutex> lck(mtx);
vec.push_back(i);
}
}
void pop_thread() {
for (int i = 0; i < 10; i++) {
std::lock_guard<std::mutex> lck(mtx);
if (!vec.empty()) {
std::cout << vec.back() << std::endl;
vec.pop_back();
}
}
}
int main() {
std::thread t1(push_thread);
std::thread t2(pop_thread);
t1.join();
t2.join();
return 0;
}
```
在这个例子中,我们创建了两个线程`t1`和`t2`,分别用于向vector中添加元素和弹出vector中的元素。为了保证vector的访问同步和互斥,我们使用了mutex。在`t1`和`t2`中,我们都使用了`std::lock_guard`来获取mutex的控制权并保证在访问vector时只有一个线程在执行。这样,就能保证在多个线程同时访问vector时不会出现数据竞争和数据不一致等问题。
注意,使用mutex来保护vector的访问时,需要确保在访问vector时只有一个线程在执行。否则,可能会出现死锁等问题。另外,如果vector中存储的是指针或引用等类型,需要额外注意指针或引用的生命周期,以避免出现悬空指针等问题。
阅读全文