我正在尝试学习如何使用Disruptor.NET消息框架,我找不到任何实际的例子.有很多文章都有关于它是如何工作的图片,但我找不到任何实际的内容,并向您展示如何实现这些方法.什么是一个例子?
我没有提供完整的列表,因为下面的代码对于那些熟悉 Disruptor 的人来说已经足够了。问题是调用Next和Publish方法是否是线程安全的。下面的例子中哪一个是正确的?请注意,Attach可以同时从不同线程调用。我有多个消费者。
例1. 锁定一切:
private object attachLock = new object();
// can be called from parallel threads
public void Attach(OrdersExecutor oe)
{
lock (attachLock)
{
long sequenceNo = ringBuffer.Next();
ringBuffer[sequenceNo].Value = oe;
ringBuffer.Publish(sequenceNo);
}
}
Run Code Online (Sandbox Code Playgroud)
例2. 锁定下一个:
private object attachLock = new object();
// can be called from parallel threads
public void Attach(OrdersExecutor oe)
{
long sequenceNo;
lock (attachLock)
{
sequenceNo = ringBuffer.Next();
}
ringBuffer[sequenceNo].Value = oe;
ringBuffer.Publish(sequenceNo);
}
Run Code Online (Sandbox Code Playgroud)
例3. 无锁
private object …Run Code Online (Sandbox Code Playgroud)