キューを監視する最も効率的な方法は何ですか。キューを最も効率的に監視する方法
コードのfollwoing作品は、リソースの最大の独り占めです:
/// <summary>
/// Starts the service.
/// </summary>
private void StartService()
{
while (true)
{
//the check on count is not thread safe
while (_MessageQueue.Count > 0)
{
Common.IMessage message;
// the call to GetMessageFromQueue is thread safe
if (_MessageQueue.GetMessageFromQueue(out message) == true)
{
if (message.RoutingInfo == Devices.Common.MessageRoutingInfo.ToDevice)
{
_Port.SerialPort.WriteLine(message.Message);
}
if (message.RoutingInfo == Devices.Common.MessageRoutingInfo.FromDevice)
{
OnDeviceMessageReceived(new Common.DeviceMessageArgs(message.Message));
}
}
}
}
}
サービス開始は、バックグラウンドスレッド上で動作する、_MessageQueue.Countへの呼び出しはスレッドセーフではありません、私は、メッセージキューにカウントにロックしていないです。しかし、私は_MessageQueue.GetMessageFromQueueの実装をロックします。 これは効率的な方法ですか?私はむしろイベントを発生させるべきですか?キューが0から0以上になるたびに?
ませんが眠ります。適切な待機/通知を行うには、イベントまたは信号を使用します。 –
なぜマットですか?私はプロデューサーを支配している。アイテムがキューに追加されたときにイベントを発生させるべきですか?私はワイタンダルを調べます。 – AndyMM
+1。例については私の答えを見てください。 – dtb