如果在提示線程解決方案時沒有允許輪詢,這是什麼意思,因爲它浪費,它有延遲並且不確定。線程不應該使用輪詢來互相發信號。c#:什麼是線程輪詢?
編輯
根據您的回答,到目前爲止,我相信我的線程執行(摘自:http://www.albahari.com/threading/part2.aspx#_AutoResetEvent)以下不使用輪詢。如果我錯了,請糾正我。
using System;
using System.Threading;
using System.Collections.Generic;
class ProducerConsumerQueue : IDisposable {
EventWaitHandle _wh = new AutoResetEvent (false);
Thread _worker;
readonly object _locker = new object();
Queue<string> _tasks = new Queue<string>();
public ProducerConsumerQueue() (
_worker = new Thread (Work);
_worker.Start();
}
public void EnqueueTask (string task) (
lock (_locker) _tasks.Enqueue (task);
_wh.Set();
}
public void Dispose() (
EnqueueTask (null); // Signal the consumer to exit.
_worker.Join(); // Wait for the consumer's thread to finish.
_wh.Close(); // Release any OS resources.
}
void Work() (
while (true)
{
string task = null;
lock (_locker)
if (_tasks.Count > 0)
{
task = _tasks.Dequeue();
if (task == null) return;
}
if (task != null)
{
Console.WriteLine ("Performing task: " + task);
Thread.Sleep (1000); // simulate work...
}
else
_wh.WaitOne(); // No more tasks - wait for a signal
}
}
}
你的意思是池嗎? – 2010-10-03 12:29:02
你需要給出更多的背景知道你在哪裏聽到這個詞,尤其是你想要達到的目標。 – 2010-10-03 12:29:17
沒有沒有池 - 它是投票 – Moon 2010-10-03 12:29:54