基本上我的问题是:在没有同步的情况下,从两个线程调用front+pop和push是否安全?
我已经阅读了相关内容,但从未找到清晰的答案。有些人说你应该使用互斥锁,但有些人暗示你可以为push和pop使用两个不同的互斥锁。这是真的吗?
这段代码是否具有未定义的行为?
我认为这是未定义的行为,但是您可以设计一个安全的队列来进行弹出和推入操作,那么为什么std::queue不是这样呢?
std::queue<int> queue;
int pop()
{
int x = queue.front();
queue.pop();
return x;
}
void push(int x)
{
queue.push(x);
}
int main()
{
queue.push(1);
std::thread t1(pop);
std::thread t2(push);
t1.join();
t2.join();
}
我认为这是未定义的行为,但是您可以设计一个安全的队列来进行弹出和推入操作,那么为什么std::queue不是这样呢?