c++ 互斥锁vector
时间: 2023-08-27 19:16:05 浏览: 245
在C++中,使用互斥锁来保护一个`std::vector`的访问可以确保线程安全。由于`std::vector`是一个可变大小的容器,多个线程同时对其进行读写操作可能导致竞争条件和数据损坏。
下面是一个使用互斥锁保护`std::vector`的示例:
```cpp
#include <iostream>
#include <thread>
#include <vector>
#include <mutex>
std::vector<int> myVector;
std::mutex mtx;
void addToVector(int value) {
std::lock_guard<std::mutex> lock(mtx); // 锁定互斥锁
myVector.push_back(value);
// 在函数结束时自动释放互斥锁
}
int main() {
std::thread t1(addToVector, 1);
std::thread t2(addToVector, 2);
t1.join();
t2.join();
// 输出向量的内容
for (const auto& value : myVector) {
std::cout << value << " ";
}
std::cout << std::endl;
return 0;
}
```
在上面的示例中,`std::vector<int>`对象`myVector`是被多个线程访问的共享资源。通过在`addToVector`函数中使用`std::lock_guard<std::mutex>`来锁定互斥锁`mtx`,确保每个线程在访问和修改`myVector`之前先获得锁。这样可以避免多个线程同时修改`myVector`而导致数据不一致的问题。
使用互斥锁来保护`std::vector`的访问确保了线程安全性,但可能会带来性能开销。在某些情况下,如果读操作远远多于写操作,可以考虑使用读写锁(`std::shared_mutex`)来提高并发性能。读写锁允许多个线程同时读取共享资源,但在有线程进行写入时,其他线程无法进行读取或写入操作。
阅读全文