如何同步线程中的 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 个进程以便它们一起运行?的主要内容,如果未能解决你的问题,请参考以下文章

windows上的进程间同步

Windows 中的进程间同步屏障

如何使进程与随机数量的活动线程同步?

Java多线程详解

python多线程

进程线程同步异步