.NET - 线程同步

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#中的相应功能吗?如果可以的话,也许就是一个例子!

Rob*_*ser 5

.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)