以下是我的 Enqueue 和 Dequeue 函数。如何使它们线程安全?我考虑过使用来自 Windows.h 的互斥量,但如果可能的话,我不想将程序限制为仅适用于 Windows。
void Queue::Enqueue(int num){
//increase recorded size
size++;
//stick in num
numbers[nextSpace] = num;
//find the next available space
nextSpace = (++nextSpace) % maxSize;
}
int Queue::Dequeue(){
int temp;
temp = items[curSpace];
curSpace = (++curSpace) % maxSize;
size--;
return temp;
}
lockfree::queue
或类似的东西吧。(或者如果你想要一个只有一个消费者和一个生产者的循环缓冲区,可以使用spsc_queue
。) - Kerrek SB