我正在编写一个多线程程序,其中一个线程执行大量系统调用(如读,写),而其他线程执行普通调用,如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总是最后执行?
答案 0 :(得分:2)
您只是先测量哪个线程完成,而不是先测试哪个线程。假设它们并行运行并且大致在同一时间开始,那么花费较少时间工作的那个将首先完成。
如果你想观察两者中的操作顺序,请运行strace -f
下的程序,但要注意跟踪的开销会减慢很多事情并且往往会消除跟踪程序中的并行性,除非它是在没有系统调用的情况下完成纯粹的计算任务。