2

我正在编写一个多线程程序,其中一个线程执行大量系统调用(如读、写),而其他线程执行普通调用,如 printf。假设线程A用于普通调用,线程B用于系统调用,我的主函数就像

int main()
{
  pthread_t thread_A;
  pthread_t thread_B;

  pthread_create(&thread_B,NULL,&system_call_func,NULL);
  pthread_create(&thread_A,NULL,&printf_func,NULL);

  pthread_join(thread_B,NULL);
  pthread_join(thread_A,NULL);

  printf("Last thread to be executed was %c\n",write_last);
  return 0;
}

通过这个,我发现带有系统调用的线程总是最后执行。即使我改变线程创建和加入的顺序,它仍然是线程B。我有两个问题,线程创建/加入的顺序重要吗?是因为线程B总是最后执行的系统调用吗?

4

1 回答 1

2

您只是在测量哪个线程先完成,而不是哪个线程先运行。假设它们都并行运行并且大致在同一时间开始,那么花费较少时间工作的将首先完成。

如果您想观察两者的操作顺序,请在 下运行程序strace -f,但请注意,跟踪的开销会大大减慢速度,并且往往会消除跟踪程序中的并行性,除非它正在执行没有系统调用的纯计算任务.

于 2013-01-29T03:49:46.750 回答