C#多線程のSemaphore(信號量,負責協調各個線程)
阿新 • • 發佈:2017-08-25
csharp init true 控制 line 執行方法 start com 執行
Semaphore負責協調線程,可以限制對某一資源訪問的線程數量
這裏對SemaphoreSlim類的用法做一個簡單的例子:
namespace WpfApplication6 { /// <summary> /// MainWindow.xaml 的交互邏輯 /// </summary> public partial class MainWindow : Window { static SemaphoreSlim semLim = new SemaphoreSlim(3); //3表示最多只能有三個線程同時訪問 public MainWindow() { InitializeComponent(); ConsoleManager.Show();//打開控制臺窗口 } private void Window_Loaded(object sender, RoutedEventArgs e) { for (int i = 0; i < 10; i++) { new Thread(SemaphoreTest).Start(); } Console.Read(); } static void SemaphoreTest() { semLim.Wait(); Console.WriteLine("線程" + Thread.CurrentThread.ManagedThreadId.ToString() + "開始執行"); Thread.Sleep(2000); Console.WriteLine("線程" + Thread.CurrentThread.ManagedThreadId.ToString() + "執行完畢"); semLim.Release(); } } }
可以看到,剛開始只有三個線程在執行,當一個線程執行完畢並釋放之後,才會有新的線程來執行方法!
C#多線程のSemaphore(信號量,負責協調各個線程)