您好,登錄后才能下訂單哦!
在C#中,可以使用多種方法來實(shí)現(xiàn)多進(jìn)程并發(fā)控制。這里我們將介紹兩種常見的方法:使用Mutex
和使用Semaphore
。
Mutex
(互斥量):Mutex
是一個同步原語,用于確保多個線程或進(jìn)程不會同時訪問共享資源。以下是一個使用Mutex
實(shí)現(xiàn)多進(jìn)程并發(fā)控制的示例:
using System;
using System.Diagnostics;
using System.Threading;
class Program
{
static void Main(string[] args)
{
using (var mutex = new Mutex(false, "MyMutex"))
{
for (int i = 0; i < 5; i++)
{
var process = new Process();
process.StartInfo.FileName = "notepad.exe";
process.Start();
mutex.WaitOne(); // 等待獲取互斥量
Console.WriteLine($"Process {i} started.");
Thread.Sleep(1000); // 模擬進(jìn)程執(zhí)行時間
process.Kill();
Console.WriteLine($"Process {i} killed.");
mutex.ReleaseMutex(); // 釋放互斥量
}
}
}
}
Semaphore
(信號量):Semaphore
是一個同步原語,用于限制可以同時訪問共享資源的線程或進(jìn)程數(shù)量。以下是一個使用Semaphore
實(shí)現(xiàn)多進(jìn)程并發(fā)控制的示例:
using System;
using System.Diagnostics;
using System.Threading;
class Program
{
static void Main(string[] args)
{
using (var semaphore = new Semaphore(3, 3, "MySemaphore"))
{
for (int i = 0; i < 5; i++)
{
var process = new Process();
process.StartInfo.FileName = "notepad.exe";
process.Start();
semaphore.WaitOne(); // 等待獲取信號量
Console.WriteLine($"Process {i} started.");
Thread.Sleep(1000); // 模擬進(jìn)程執(zhí)行時間
process.Kill();
Console.WriteLine($"Process {i} killed.");
semaphore.Release(); // 釋放信號量
}
}
}
}
在這個示例中,我們創(chuàng)建了一個最大并發(fā)進(jìn)程數(shù)為3的信號量。當(dāng)有更多的進(jìn)程需要訪問共享資源時,它們將等待直到有可用的信號量。這樣可以確保同時運(yùn)行的進(jìn)程數(shù)不超過3個。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。