1:EventWaitHandle类继承自WaitHandle类,其WaitHandle接收到另一线程的信号,是通过另一线程执行Set方法获取信号
2:异步执行中,异步操作完成后, WaitHandle 会收到来自另一个线程的信号
3:Semaphore类也是继承自WaitHandle类,线程通过调用WaitOne方法进入信号量,直到WaitHandle接收到信号第一种,WaitHandle接收到另一线程的信号,是看得见,摸的着的,那就是Set第二种,若隐若现,异步执行完,WaitHandle 就接收到信号请问,第三种,WaitHandle 是什么时候接收到信号,至少要能用语言来表述,如何表述?微软说它接收到了,就接受到了 ??

解决方案 »

  1.   

    Semaphore类接收到信号的时机:如果没有其他线程调用过WaitOne,或者同时调用WaitOne的线程小于信号量数目,则会立即收到信号,如果调用WaitOne的线程数目超过信号量数目,线程就会被阻止,当其他线程调用Semaphore.Release的时候,则会接收到信号,所以调用WaitOne之后应该调用Release,Release会发送信号给其他正在WaitOne等待的线程,让他得到信号执行,
      

  2.   

    Semaphore是一个古老的同步机制了,它用来限制最大并发数,也就是允许n个线程同时运行,但超过n个线程要同时运行时,只有n个能够运行,其他的在等待,正在运行的n个线程中,只要调用Semaphore.Release,信号就会被发送到其他等待的线程中的一个,让他运行,n在Semaphore构造函数中传入,