VB.NET并行与分布式编程(6)-线程与内核同步[13]
??这个代码有几个地方需要注意
1、??? 定义一个互斥对象,用于解决生产线程和消费线程操作mycounts变量的同步问题
??? Dim mymutex As New Mutex2、主线程执行完毕,关闭信号量
??????? Console.WriteLine(Now.ToLongTimeString & "主线程执行完毕!")
??????? mysemaphore.Close()3、将对mycounts变量的操作放在互斥体的保护下
??????????? mymutex.WaitOne()
??????????? mycounts += 1
??????????? Console.WriteLine("{0}号生产者线程运行,目前数量为:{1}", Thread.CurrentThread.ManagedThreadId, mycounts)
??????????? mymutex.ReleaseMutex()?
其中,??????????? mymutex.WaitOne()等待,而??????????? mymutex.ReleaseMutex()释放
?
?
此外,WaitHandle.SignalAndWait 方法在解决复杂的同步问题,尤其是防止死锁很有帮助 ,对于同时操作信号量和互斥体,可以使以原子方式释放互斥体并在事件上等待。WaitHandle.SignalAndWait 方法向一个WaitHandle 发出信号并等待另一个,如果信号和等待都成功完成,则为 true;如果等待没有完成,则此方法不返回,第一个参数为信号,第二个参数为等待