如何同步线程中的 2 个进程以便它们一起运行?
Posted
技术标签:
【中文标题】如何同步线程中的 2 个进程以便它们一起运行?【英文标题】:How do I synchronize 2 processes in threads so they run together? 【发布时间】:2011-10-30 16:22:29 【问题描述】:我目前有这个代码(感谢这里的帮助)。我需要将第一个 ProcessMessage 创建为线程并同步运行第二个 ProcessMessage
(在当前线程上),然后在单个线程上执行 Join。否则,我将让三个线程有效地做两件事。我该如何修改它来完成它?我在 .NET 3.5 上
Thread thRegion1 = new Thread(() =>
if (Region1.Trim().Length > 0)
returnMessage = ProcessTheMessage(string.Format(queueName, Region1));
Logger.Log(returnMessage);
);
Thread thRegion2 = new Thread(() =>
if (Region2.Trim().Length > 0)
returnMessage = ProcessTheMessage(string.Format(queueName, Region2));
Logger.Log(returnMessage);
);
thRegion1.Start();
thRegion2.Start();
thRegion1.Join();
thRegion2.Join();
【问题讨论】:
运行此代码的线程没有完成任何工作。所以只启动一个线程。 【参考方案1】:你可以这样做:
Thread thRegion1 = new Thread(() =>
if (shawRegion1.Trim().Length > 0)
returnMessage = ProcessMessage(string.Format(queueName,
shawRegion1));
Logger.Log(returnMessage);
);
thRegion1.Start();
if (shawRegion2.Trim().Length > 0)
returnMessage = ProcessMessage(string.Format(queueName, shawRegion2));
Logger.Log(returnMessage);
thRegion1.Join();
这会启动thRegion1
线程并在当前线程中执行另一部分工作。工作完成后,它会在thRegion1
上调用Join
,如果thRegion1
已经完成其工作,它将立即返回。
【讨论】:
谢谢。但是 thRegion2 在哪里?我应该从第二个过程的这一行中删除它吗?线程 thRegion2 = new Thread(() => ? @Ree 是的,它被移除了,它正在做的工作被移动到当前线程。 为什么它在可以做有用的工作时保持空闲状态?thRegion2
不需要,因此,它不再存在于我的代码中。它所做的工作已按您的要求移至当前线程。
那么这会使2个区域在并发通道中处理吗?
@Ree 是的,第一个在新线程中启动,第二个在您当前的线程中运行,因此它们都在同时运行。以上是关于如何同步线程中的 2 个进程以便它们一起运行?的主要内容,如果未能解决你的问题,请参考以下文章