c# - 如何在一个地方暂停多个线程,然后让一个线程做一些事情?C# (Zennoposter)
问题描述
我是线程和类似事物的新手。我知道如何使用锁结构,但没有其他东西。但现在时机已到。
我在 Zennoposter 上有一个带有多个线程的程序。我使用 C# 在那里编写代码。一切正常,但现在我遇到了问题。我需要通过一个线程在程序的某些地方执行一段代码(我必须运行一个应用程序并初始化 project.Tables)。我尝试了两种方法:
- 我在这段代码之前暂停了所有线程,除了最后一个线程,最后一个线程执行了代码。但这对我不起作用。我制作了一个线程列表,检查了它们的状态,如果状态没有暂停,我将其暂停。但是我没有让最后一个线程工作,而是阻止了所有线程......
- 我使用了静态 AutoResetEvent (
static AutoResetEvent waitHandler = new AutoResetEvent(true);
)。然后在“一个线程执行”的代码位置之前,我不得不暂停所有线程,我曾经waitHandler.WaitOne();
让每个线程等待。在这段代码之后,我曾经waitHandler.Set();
允许其他线程占用waitHandler
。但它和锁结构是一样的:(
问题是,如果一个线程到达必须停止的地方,并且任何其他线程之前仍在执行代码,它必须等待任何其他线程并且不执行“单线程执行”代码。所以,如果有人知道如何解决这个问题,请帮助我。我坚持了一周。
解决方案
你需要制作锁样本:
lock(SyncObject) {
//here your code only for 1 thread, others threads waite
}
推荐阅读
- python - Docker - 安装烧瓶失败
- javascript - addEventListener 和 removeEventListener 在 Firefox/Chrome 与 Edge 中的不同行为
- java - 打印书籍的类型
- firebase - Firebase admin SDK 可以检索用户身份验证令牌吗?
- php - BlueSnap - 托管支付字段令牌
- python - 将列表元素的两个不同部分存储到另一个列表中
- java - 无法在 Eclipse IDE 中下载 CrudRepository 源 - 找不到源
- python - 如何从 Windows Shell 启动 python 脚本?
- ruby-on-rails - 在字符串插值中格式化变量
- html - 无法解决 angular4 和 html 中的文本溢出问题