【问题标题】:How to pause multiple threads in one place and then make one thread do some things? C# (Zennoposter)如何在一个地方暂停多个线程,然后让一个线程做一些事情? C# (Zennoposter)
【发布时间】:2018-07-20 06:28:15
【问题描述】:

我是线程和类似东西的新手。我知道如何使用锁结构,但没有其他东西。但现在是时候了。

我在 Zennoposter 上有一个包含多个线程的程序。我使用 C# 在那里编写代码。一切正常,但现在我遇到了问题。我需要通过一个线程在程序的某些地方执行一段代码(我必须运行一个应用程序并初始化 project.Tables)。我尝试了两种方法:

  1. 我在这段代码之前暂停了所有线程,除了最后一个线程,最后一个线程执行了代码。但这对我不起作用。我制作了一个线程列表,检查了它们的状态,如果状态没有暂停,我将其暂停。但是我没有让最后一个线程继续工作,而是阻止了所有线程......
  2. 我使用了静态 AutoResetEvent (static AutoResetEvent waitHandler = new AutoResetEvent(true);)。然后在“一个线程执行”的代码位置之前,我不得不暂停所有线程,我使用waitHandler.WaitOne(); 让每个线程等待。在这段代码之后,我使用waitHandler.Set(); 允许其他线程占用waitHandler。但它和锁构造是一样的:(

问题是,如果一个线程到了必须停止的地方,并且任何其他线程之前仍在执行代码,它必须等待任何其他线程而不执行“单线程执行”代码。 所以,如果有人知道如何解决这个问题,请帮助我。我坚持了一周。

【问题讨论】:

    标签: c# multithreading synchronization thread-safety autoresetevent


    【解决方案1】:

    你需要做锁 示例:

    lock(SyncObject) {
    
    //here your code only for 1 thread, others threads waite
    
    }
    

    【讨论】:

      猜你喜欢
      • 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
      相关资源
      最近更新 更多