我找到了这个辅助类:
public sealed class QueuedLock
{
private object innerLock;
private volatile int ticketsCount = 0;
private volatile int ticketToRide = 1;
public QueuedLock()
{
innerLock = new Object();
}
public void Enter()
{
int myTicket = Interlocked.Increment(ref ticketsCount);
Monitor.Enter(innerLock);
while (true)
{
if (myTicket == ticketToRide)
{
return;
}
else
{
Monitor.Wait(innerLock);
}
}
}
public void Exit()
{
Interlocked.Increment(ref ticketToRide);
Monitor.PulseAll(innerLock);
Monitor.Exit(innerLock);
}
}
这里:
Is there a synchronization class that guarantee FIFO order in C#?
它对我来说很好,但我刚刚阅读了一些关于使用这些可变变量的主题的评论,我不确定这里是否存在问题。我理解代码并在我的应用程序中实现它以完成正确的工作,但我承认我看不到这种方法在未来有负面影响,至少,如果有的话。
我还没有看到很多这样做的方法,所以最好有一个完整且安全的版本可以在任何情况下使用。
所以基本上,问题是,可以改进这种方法吗?它有任何细微的问题吗?
最佳答案
对于多线程FIFO(队列),.NET已经提供了ConcurrentQueue,我建议使用ConcurrentQueue,而不是使用低级锁。
MSDN:ConcurrentQueue
关于c# - 线程与 FIFO 顺序同步,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31309967/