arm下怎么给queue队列加锁
时间: 2024-04-14 22:28:28 浏览: 8
在ARM平台上,你可以使用互斥锁(mutex)来为队列(queue)添加锁以确保线程安全。
以下是一个示例代码,演示了如何在ARM平台上使用互斥锁为队列添加锁:
```c++
#include <iostream>
#include <queue>
#include <mutex>
#include <thread>
std::queue<int> myQueue;
std::mutex mtx;
void producer() {
for (int i = 0; i < 10; ++i) {
std::lock_guard<std::mutex> lock(mtx);
myQueue.push(i);
std::cout << "Produced: " << i << std::endl;
}
}
void consumer() {
while (true) {
std::lock_guard<std::mutex> lock(mtx);
if (!myQueue.empty()) {
int value = myQueue.front();
myQueue.pop();
std::cout << "Consumed: " << value << std::endl;
}
else {
break;
}
}
}
int main() {
std::thread producerThread(producer);
std::thread consumerThread(consumer);
producerThread.join();
consumerThread.join();
return 0;
}
```
在这个示例代码中,互斥锁 `mtx` 用于保护对队列 `myQueue` 的访问。在生产者函数 `producer` 中,通过使用 `std::lock_guard` 来创建一个互斥锁的作用域保护区域,确保在将数据推入队列时是线程安全的。在消费者函数 `consumer` 中,同样使用 `std::lock_guard` 来保护对队列的访问,以确保在从队列中取出数据时是线程安全的。
在ARM平台上使用互斥锁的方式与其他平台上并无区别。你只需确保在编译时链接正确的线程库(如pthread)。
希望这个示例能对你有所帮助!如果你有任何进一步的问题,请随时提问。