我应该锁定订阅者吗?
Should I lock in Subscriber?
是否有必要在 NetMQ 中使用 top "lock" 作为订阅者
我认为是的,我在下面做的点看起来是正确的地方吗?
private void Subscribe()
{
using (var client = new SubscriberSocket())
{
client.Options.ReceiveHighWatermark = 1000;
client.Connect(Connection);
client.Subscribe(Key);
while (true)
{
string address = client.ReceiveFrameString();
lock (SubLock)
{
int newSeqNum = int.Parse(client.ReceiveFrameString());
SendDTTxt = client.ReceiveFrameString();
string contents = client.ReceiveFrameString();
if (SeqNum == -1)
SeqNum = newSeqNum - 1;
if (newSeqNum != SeqNum + 1)
{
throw new Exception("[NetMTSub.Subscribe] SeqNum out of sequence");
}
SeqNum = newSeqNum;
UserAction(contents);
}
}
}
}
如您的评论所述 - 从一个线程调用订阅:
因为订阅只从一个线程调用,所以锁是不必要的。
单线程将无缘无故地依次锁定和解锁该代码块。
可以安全地删除它。
是否有必要在 NetMQ 中使用 top "lock" 作为订阅者
我认为是的,我在下面做的点看起来是正确的地方吗?
private void Subscribe()
{
using (var client = new SubscriberSocket())
{
client.Options.ReceiveHighWatermark = 1000;
client.Connect(Connection);
client.Subscribe(Key);
while (true)
{
string address = client.ReceiveFrameString();
lock (SubLock)
{
int newSeqNum = int.Parse(client.ReceiveFrameString());
SendDTTxt = client.ReceiveFrameString();
string contents = client.ReceiveFrameString();
if (SeqNum == -1)
SeqNum = newSeqNum - 1;
if (newSeqNum != SeqNum + 1)
{
throw new Exception("[NetMTSub.Subscribe] SeqNum out of sequence");
}
SeqNum = newSeqNum;
UserAction(contents);
}
}
}
}
如您的评论所述 - 从一个线程调用订阅:
因为订阅只从一个线程调用,所以锁是不必要的。
单线程将无缘无故地依次锁定和解锁该代码块。
可以安全地删除它。