【问题标题】:Multithread use AutoResetEvent WaitOne independently each threads in c#多线程使用 AutoResetEvent WaitOne 在 c# 中独立每个线程
【发布时间】:2018-04-01 09:41:41
【问题描述】:

您好,我有多线程应用程序(c# iis 应用程序)。我将多线程作为后台线程启动。并且在每个线程内部我都有一个使用 autoresetevent.waitone 的逻辑。但是结果当一个线程使用 waitone 命令时,其他线程也进入睡眠模式并且不工作。如何分离 WaitOne 逻辑而不影响其他线程?

Thread1 
    AutoResetEvent receiveCompleteEvent=null;
    using(receiveCompleteEvent=new System.Threading.AutoResetEvent(false))
    {
    DoJob1();...

    receiveCompleteEvent.WaitOne();
    }

Thread2
    AutoResetEvent receiveCompleteEvent=null;
    using(receiveCompleteEvent=new System.Threading.AutoResetEvent(false))
    {
    DoJob2();...

    receiveCompleteEvent.WaitOne();
    }

当 Thread1 工作或相反时,Thread2 不工作。 我想当thread1进入waitone并进入睡眠状态时,thread2仍在独立工作。

【问题讨论】:

  • 所有线程都有自己的AutoResetEventreceiveCompleteEvent,想像receiveCompleteEvent1,receiveCompleteEvent2...

标签: c# multithreading thread-safety


【解决方案1】:

这是因为每个线程都在覆盖另一个线程的 ARE 实例。如果你分开等待事件,那么你会遇到竞争条件并且没有同步。

那么,你想要互斥还是你想要竞争条件?您当前的代码设法以某种方式实现两者。

【讨论】:

  • 嗨,我单独的 receivecompleteevent 和每个线程调用我创建一个新的但第一个线程块 other.using (receiveCompleteEvent = new System.Threading.AutoResetEvent(false)) { //代码在这里 Dojob receiveCompleteEvent .WaitOne(); }你能分享示例代码吗?
  • 我希望每个线程与其他线程独立工作。如果一个线程进入等待另一个线程继续工作
  • 如果你想让线程独立进行,你为什么坚持使用 ARE 是不清楚的。您是否正在寻找某个东西的无锁实现?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多