你需要Semaphores與限制1和超時時間0毫秒
通過使用旗語你可以說,只有線程的數量有限,在同一時間訪問一段代碼。
如何使用它
見this sample您需要使用此方法等待
bool WaitOne(int millisecondsTimeout)
指定超時時間= 0;這樣你的等待線程將等待0秒這意味着他們會簡單地跳過代碼
Example
class SemaphoreExample
{
// Three reserved slots for threads
public static Semaphore Pool = new Semaphore(1, 0);
public static void Main(string[] args)
{
// Create and start 20 threads
for (int i = 0; i < 20; i++)
{
Thread t = new Thread(new ThreadStart(DoWork));
t.Start();
}
Console.ReadLine();
}
private static void DoWork()
{
// Wait 0 miliseconds
SemaphoreExample.Pool.WaitOne(0);
#region Area Protected By Semaphore
Console.WriteLine("Acquired slot...");
for (int i = 0; i < 10; i++)
{
Console.WriteLine(i + 1);
}
Console.WriteLine("Released slot...");
#endregion
// Release the semaphore slot
SemaphoreExample.Pool.Release();
}
}
爲什麼你認爲我想使用接近零的超時?爲什麼不只是零? – 2011-12-28 05:46:37
@Louis:你可以使用0的時間間隔(或者等價地,使用另一個不需要TimeSpan的超載)。在放棄之前至少等待一小段時間的資源是很常見的。你不必,如果你不想。 :) – Ani 2011-12-28 05:48:37