【问题标题】:How do I synchronize 2 processes in threads so they run together?如何同步线程中的 2 个进程以便它们一起运行?
【发布时间】: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();

【问题讨论】:

  • 运行此代码的线程没有完成任何工作。所以只启动一个线程。

标签: c# multithreading .net-3.5 synchronization


【解决方案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 是的,第一个在新线程中启动,第二个在您当前的线程中运行,因此它们都在同时运行。
猜你喜欢
  • 1970-01-01
  • 2011-02-18
  • 1970-01-01
  • 1970-01-01
  • 2010-10-20
  • 2017-10-06
  • 1970-01-01
  • 2011-07-02
  • 1970-01-01
相关资源
最近更新 更多