C#使用Semaphore来同步线程

官方文档地址

  1. 尽量避免超时的发生。
  2. 如果真的超时了,应该最大限度的保证是真的超时了。
// 初始化一个信号量,初始值为0,最大值为1. private Semaphore sem = new Semaphore(0, 1); private void ReleaseSem() {     // 释放一个信号量     if (有人在等待)     {         sem.Release();     }     else     {         这个是原来的某个超时的返回的结果。     } } public void WaitSem() {     // 这个函数同时,只能被一个线程调用,避免messageId被覆盖。     lock();     // 等待一个信号,最长等待5秒钟     sem.WaitOne(5000);     unlock(); }

相关内容推荐