이 글은 주로 C# 멀티스레딩에서 세마포어의 사용법을 자세하게 소개하고 있습니다. 관심있는 친구들은 참고하시면 됩니다.
세마포어: 스레드가 신호를 실행할 수 있게 해주는 풀로 이해하시면 됩니다. pool 신호의 수는 동시에 실행할 수 있는 스레드 수를 허용합니다.
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); }
설명:
1. semaphore.Release(n), n>semaphore가 최대 세마포를 수용할 수 있는 경우 예외가 발생합니다.
2. 세마포어가 소유한 세마포어가 1이면 세마포어는 Mutex와 동일합니다.
3. 세마포어가 소유한 세마포어가 1보다 크면 동시에 여러 스레드에서 세마포어 수를 얻을 수 있습니다. 세마포어를 획득한 스레드는 동시에 실행될 것으로 예상됩니다(실제 상황은 CPU 코어 수 및 CPU 동시 소비 스레드 수와 관련이 있을 수 있음)
위 내용은 C# 멀티스레딩에서 세마포어 사용에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!