温馨提示×

C++ queue多线程操作的方法是什么

c++
小亿
108
2023-11-08 19:09:06
栏目: 编程语言

在C++中,可以使用互斥锁(mutex)来实现多线程环境下对queue的操作。

  1. 创建一个互斥锁变量:std::mutex mtx;
  2. 使用互斥锁保护对queue的操作,在需要对queue进行操作的地方加锁和解锁:
// 加锁
std::lock_guard<std::mutex> lock(mtx);

// 对queue进行操作,比如push、pop等

// 解锁
  1. 在多个线程中使用互斥锁来保护对queue的操作,以防止竞争条件(race condition)的发生。

以下是一个使用互斥锁实现多线程操作queue的示例代码:

#include <iostream>
#include <thread>
#include <queue>
#include <mutex>

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 << "Producer: " << i << std::endl;
    }
}

void consumer() {
    for (int i = 0; i < 10; ++i) {
        std::lock_guard<std::mutex> lock(mtx);
        if (!myQueue.empty()) {
            int value = myQueue.front();
            myQueue.pop();
            std::cout << "Consumer: " << value << std::endl;
        }
    }
}

int main() {
    std::thread producerThread(producer);
    std::thread consumerThread(consumer);

    producerThread.join();
    consumerThread.join();

    return 0;
}

在上述代码中,producer线程向queue中推送数据,而consumer线程从queue中取出数据。互斥锁(mtx)用来保护对queue的push和pop操作,以避免竞争条件的发生。

0