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