在 C++ 中,priority_queue
并不是線程安全的。如果你想在多線程環(huán)境中使用它,你需要自己提供線程安全機(jī)制。
一種常見的方法是使用互斥鎖(mutex)來保護(hù)對(duì)優(yōu)先隊(duì)列的訪問。你可以定義一個(gè)類來封裝優(yōu)先隊(duì)列,并在訪問隊(duì)列時(shí)使用互斥鎖來保證線程安全。下面是一個(gè)簡(jiǎn)單的例子:
#include <queue>
#include <mutex>
template <typename T>
class ThreadSafePriorityQueue {
public:
void push(const T& value) {
std::lock_guard<std::mutex> lock(mutex_);
queue_.push(value);
}
bool pop(T& value) {
std::lock_guard<std::mutex> lock(mutex_);
if (queue_.empty()) {
return false;
}
value = queue_.top();
queue_.pop();
return true;
}
private:
std::priority_queue<T> queue_;
std::mutex mutex_;
};
在這個(gè)例子中,我們定義了一個(gè) ThreadSafePriorityQueue
類來封裝 std::priority_queue
。我們使用 std::lock_guard
來自動(dòng)管理互斥鎖的生命周期,確保在訪問隊(duì)列時(shí)只有一個(gè)線程能夠持有鎖。
當(dāng)然,這只是一個(gè)簡(jiǎn)單的例子,你可能需要根據(jù)你的具體需求來設(shè)計(jì)更復(fù)雜的線程安全機(jī)制。另外,如果你的程序中有多個(gè)線程需要訪問優(yōu)先隊(duì)列,你可能需要考慮使用更高級(jí)的同步原語,如條件變量等。