c - 线程创建的顺序重要吗?

标签 c multithreading

我正在编写一个多线程程序,其中一个线程执行大量系统调用(如读、写),而其他线程执行普通调用(如 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总是最后执行?

最佳答案

您只是测量哪个线程先完成,而不是哪个线程先运行。假设它们并行运行并大致在同一时间启动,则工作时间较少的将首先完成。

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

关于c - 线程创建的顺序重要吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14575086/

相关文章:

C - 整数 var 的假值

c - 关于C中static关键字的两个问题

java - 我应该在这种多线程架构下使用 Hibernate 还是放弃它?

c - 我怎样才能找到源自 clone() 的 glibc 回溯的来源?

haskell - 对于线程化Haskell调试,我最好的工具是什么?

c - 传输端点未连接,连接失败()

c - 在 C 中将字符串作为文件句柄访问

c - 解释一下这个 C 代码片段——printf() 函数参数会发生什么?

c++ - 使用信号量的读写器偏好

c++ - 线程安全标准 :list C++