【问题标题】:How to print odd and even numbers from 2 separate threads synchronize [closed]如何从2个单独的线程同步打印奇数和偶数[关闭]
【发布时间】:2013-01-15 16:08:41
【问题描述】:

我想在 win32 C++ 中以同步方式从 2 个单独的线程中打印奇数和偶数。我正在使用关键部分来实现它,但没有得到想要的结果。可以使用临界区来完成。

【问题讨论】:

  • 还可以清楚地描述synchronized 对您的意义。您的意思是输出应该是1,2,3,4... 并且每个线程都在生成偶数或奇数?
  • 同步的重点是让事情发生混乱。我不推荐这个练习。
  • 是的,一个线程会打印偶数,而另一个线程会打印奇数。输出应该是 1,2,3,4....
  • 这比乍一看更具挑战性。请张贴您尝试过的内容,我们将从那里为您提供帮助。
  • @franji:这不是家庭作业,只是为了好玩,我之前使用互斥锁做过,尝试使用临界区,我在我的实现中发现了我的问题并解决了它并粘贴了代码 n 它工作正常现在。

标签: c++ multithreading winapi


【解决方案1】:

我相信它可以只用关键部分来完成,但方式并不明显。

// all in pseudocode:

mutex printMutex;
int printedOdd = 1;

//thread 1
int start = 1;
while(1) {
  lock (printMutex);
  if (printOdd == 1) {
    print ( start );
    start += 2;
    printedOdd = 0;
  } else {
    unlock (printMutex);
    yield();
    continue;
  }
  unlock (printMutex);
}

// thread 2
int start = 2;
while(1) {
  lock (printMutex);
  if (printOdd == 0) {
    print ( start );
    start += 2;
    printedOdd = 1;
  } else {
    unlock (printMutex);
    yield();
    continue;
  }
  unlock (printMutex);
}

我实际上不明白做这样的事情的意义,但答案是......一个答案:)

【讨论】:

  • 我想通过临界区来实现它,而不是通过互斥体。
  • 临界区是互斥体。
  • @david:据我所知,mutex 可以跨进程间和进程内线程同步使用,而临界区只能用于单个进程中的线程同步。
  • @user1808932 - “我正在使用临界区来实现它,但没有得到想要的结果。” - 发布您的代码,人们会提供帮助。
  • Win 32 临界区对象是互斥体,我在其中使用通用术语:en.wikipedia.org/wiki/Mutual_exclusion 你是否注意到这个答案给了你伪代码。当你把它变成真正的代码时,你可以使用你选择的互斥锁。
猜你喜欢
  • 2012-07-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-12
  • 2011-02-14
  • 2014-08-06
  • 2011-08-26
  • 2021-10-15
相关资源
最近更新 更多