1. 程式人生 > >多線程的並發控制

多線程的並發控制

str ons 出現 多個 ini 並發控制 semaphore 使用 wait

當有多個線程同時訪問有限制的資源時會出現並發情況,此時可以使用‘信號量’來控制訪問資源的線程數量


static void Main(string[] args)
{

int taskCount = 10;//總線程數
int seatCount = 4;//資源訪問最大線程數量
var semaphore = new SemaphoreSlim(seatCount,6);
var tasks = new Task[taskCount];
for (int i = 0; i < taskCount; i++)
{
tasks[i] = Task.Run(() => TaskRun(semaphore));
}
Task.WaitAll(eatings);
Console.WriteLine("All Tasks have finished!");
}
static void TaskRun(SemaphoreSlim semaphore)
{
semaphore.Wait();
try
{
Console.WriteLine("Task {0} is Running!", Task.CurrentId);
Thread.Sleep(1000);
}
finally
{
Console.WriteLine("Task {0} have finished!", Task.CurrentId);
semaphore.Release();
}
}

多線程的並發控制