Heim >Backend-Entwicklung >C#.Net-Tutorial >Detaillierte Erläuterung der Verwendung von Semaphore im C#-Multithreading
In diesem Artikel wird hauptsächlich die Verwendung von Semaphore im C#-Multithreading ausführlich vorgestellt, die einen bestimmten Referenzwert hat.
Semaphore: Es kann so verstanden werden, dass Threads die Ausführung von Signalpools ermöglichen werden so viele Signale im Pool platziert, wie viele Threads gleichzeitig ausgeführt werden dürfen.
private static void MultiThreadSynergicWithSemaphore() { //0表示创建Semaphore时,拥有可用信号量数值 //1表示Semaphore中,最多容纳信号量数值 Semaphore semaphore = new Semaphore(0, 1); Thread thread1 = new Thread(() => { //线程首先WaitOne等待一个可用的信号量 semaphore.WaitOne(); //在得到信号量后,执行下面代码内容 Console.WriteLine("thread1 work"); Thread.Sleep(5000); //线程执行完毕,将获得信号量释放(还给semaphore) semaphore.Release(); }); Thread thread2 = new Thread(() => { semaphore.WaitOne(); Console.WriteLine("thread2 work"); Thread.Sleep(5000); semaphore.Release(); }); thread2.Start(); thread1.Start(); //因在创建Semaphore时拥有的信号量为0 //semaphore.Release(1) 为加入1个信号量到semaphore中 semaphore.Release(1); }
Hinweis:
1. Wenn semaphore.Release(n), n>semaphore das maximale Semaphor aufnehmen kann, tritt eine Ausnahme auf.
2. Wenn der Semaphor im Besitz von Semaphor ist, entspricht er 1 Zu diesem Zeitpunkt kann davon ausgegangen werden, dass die Threads, die das Semaphor erhalten haben, gleichzeitig ausgeführt werden (die tatsächliche Situation hängt möglicherweise von der Anzahl der CPU-Kerne und der Anzahl der gleichzeitig ausgegebenen CPU-Threads ab)
Das obige ist der detaillierte Inhalt vonDetaillierte Erläuterung der Verwendung von Semaphore im C#-Multithreading. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!