큐를 모니터링하는 가장 효율적인 방법은 무엇입니까?큐를 모니터링하는 가장 효율적인 방법
코드의 때라도 조각 자원의 가장 큰 돼지입니다 :
/// <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가에 카운트에 고정하고 있지 않다. 그러나 _MessageQueue.GetMessageFromQueue 구현을 잠급니다. 이 방법이 효과적 이었습니까? 오히려 이벤트를 발생시켜야합니까? 큐가 0부터 0보다 커질 때마다?
아니오 잔다. 이벤트 또는 신호를 사용하여 적절한 대기/통지를하십시오. –
왜 Mats입니까? 나는 생산자에 대한 통제권을 가지고있다. 항목이 대기열에 추가되면 이벤트를 발생시켜야합니까? 내가 와틀란트를 들여다 보겠다. – AndyMM
+1. 예를 들어 나의 대답을보십시오. – dtb