The*_*eAJ 2 c# multithreading synchronization
我一直在研究一个线程,只要应用程序正在运行,它将以500毫秒的间隔运行.我注意到,如果队列中没有任何内容可供处理,我可以无用地处理,所以我到处查看我在本地的一些来源,我发现了一个接近我的例子,但它是用Java编写的.
这个例子有:
synchronized(this) {
try {
wait();
} catch (InterruptedException e) {
cleanup();
break;
}
}
Run Code Online (Sandbox Code Playgroud)
在一个永远持续的循环中.
该线程有此通知等待:
synchronized(this) {
notifyAll();
}
Run Code Online (Sandbox Code Playgroud)
这是在enqueue线程内部.我还要你注意这个类继承了Runnable.
任何人都可以快速解释C#中的相应功能吗?如果可以的话,也许就是一个例子!
.NET/C#最佳实践是使用EventWaitHandle.
你可以在线程之间共享一些变量,如下所示:
EventWaitHandle handle = new EventWaitHandle(false, EventResetMode.AutoReset);
Run Code Online (Sandbox Code Playgroud)
在消费者线程(你现在每500毫秒唤醒一个)中,你将循环等待句柄(可能是超时):
try
{
while(true)
{
handle.WaitOne();
doSomething();
}
}
catch(ThreadAbortException)
{
cleanup();
}
Run Code Online (Sandbox Code Playgroud)
并在生产者线程中:
produceSomething();
handle.Set();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
221 次 |
| 最近记录: |