【问题标题】:Order in which threads are executed线程执行的顺序
【发布时间】:2012-10-03 14:49:08
【问题描述】:

我是多线程新手,正在关注“unix 环境中的高级编程”。我无法获得线程执行的顺序。我有以下代码。

int err1 = pthread_create(&first, NULL, disp, a);
int err2 = pthread_create(&second, NULL, disp, b);
int err3 = pthread_create(&third, NULL, disp, c);

但是与第三个 tid 相关的线程是先执行的,然后是第二个,最后是第一个。不确定这是行为还是出了什么问题。

谢谢! 拉胡尔。

【问题讨论】:

  • 线程的主要特点是并行运行,这意味着它们之间没有顺序关系。如果你想在 几个 的地方订购,你通常使用同步来做到这一点。如果您希望进程通常是连续的(例如,secondfirst 完成之前根本无法运行)只需在同一个线程中运行它们。

标签: c++ multithreading unix


【解决方案1】:

这不是确定性的。线程并行运行,因此这取决于您拥有多少个处理器和超线程。如果您希望它们按给定顺序排列,则需要使用同步点。一旦启动,所有线程都以自己的速度独立运行。

【讨论】:

    【解决方案2】:

    无法保证代码创建后的执行顺序。
    唯一可以保证的是,线程 3 将在线程 2 之后创建,线程 2 将在线程 1 之后创建。
    您无法预测或假设只有在线程 1 中执行某些代码之后才会生成线程 2。如果您想实现类似的目标,您需要提供一些 Thread synchronization

    【讨论】:

      【解决方案3】:

      您的程序在一个线程中运行,并创建了另外三个。您可以保证的是其他三个线程的创建顺序以及它们将在某个阶段执行的顺序。操作系统可以停止您的主线程,并在创建新线程时按顺序为您完成新线程,它可以将它们粘在一些线程堆栈中,以便在您的主程序完成创建它们后稍后查看。关键是,你真的不知道。

      如果你需要这三个线程按顺序执行,并在下一个开始之前完成,你基本上需要首先不使用线程。

      【讨论】:

        最近更新 更多