明天我将参加考试。我对前几年的几个问题都有疑问......我对C不好。
解释为什么下面的代码不是并发的最佳代码。以及如何优化代码..
void * func ( void * arg)
{
printf("printing from thread %d\n",(int) arg);
return null;
}
int main(void)
{
pthread_t threads[5];
int i;
for(i=0;i<5;i++)
{
pthread_create( &(thread[i]), NULL, func, (void*) i);
pthread_join( threads[i], NULL);
}
return 0;
}
二...
非常感谢任何帮助......
答案 0 :(得分:2)
在第一个代码段中,您不应加入for
。在创建之后立即加入将阻止并发:基本上你在任何时候只有一个线程而你正在等待它。加入外面代替:
for(i = 0; i<5; i++)
pthread_create(&thread[i], NULL, func, (void*) i);
for(i = 0; i < 5; i++)
pthread_join(threads[i], NULL);
第二次看第二段时,很明显会发生以下情况:
由于无法取得进展,这是一个僵局。
答案 1 :(得分:0)
对于第一个问题,你不会启动五个线程同时运行,而是创建一个线程并等待它在你开始下一个线程之前退出。
对于第二个问题,考虑如果线程在main函数执行之前首先锁定互斥锁会发生什么。