std priority queue 什么时候比较值?
When does std priority queue compare the values?
我有一个优先级队列,比较函数引用了一个被多个线程访问的值。所以它必须由互斥锁保护。除了我不知道这个比较函数什么时候是运行。是 运行 当我压入一个值还是当我弹出一个值?下面的示例代码。
#include <iostream>
#include <queue>
#include <mutex>
using namespace std;
int main()
{
int compare = 7;
mutex compare_m;
auto cmp = [&](int a, int b) {return abs(compare - a)>=abs(compare-b);};
priority_queue<int, vector<int>, decltype(cmp)> x(cmp);
mutex x_m;
//in thread
{
scoped_lock m1(x_m);
//do I need this?
scoped_lock m(compare_m);
x.push(6);
}
//in thread
{
scoped_lock m1(x_m);
//do I need this?
scoped_lock m(compare_m);
x.pop();
}
}
我有一个优先级队列,比较函数引用了一个被多个线程访问的值。所以它必须由互斥锁保护。除了我不知道这个比较函数什么时候是运行。是 运行 当我压入一个值还是当我弹出一个值?下面的示例代码。
#include <iostream>
#include <queue>
#include <mutex>
using namespace std;
int main()
{
int compare = 7;
mutex compare_m;
auto cmp = [&](int a, int b) {return abs(compare - a)>=abs(compare-b);};
priority_queue<int, vector<int>, decltype(cmp)> x(cmp);
mutex x_m;
//in thread
{
scoped_lock m1(x_m);
//do I need this?
scoped_lock m(compare_m);
x.push(6);
}
//in thread
{
scoped_lock m1(x_m);
//do I need this?
scoped_lock m(compare_m);
x.pop();
}
}