1

我没有得到任何输出,但我期待输出,因为下面的THREAD1 THREAD2是代码..

#include<iostream>
#include<pthread.h>

using namespace std;

void* fun(void *arg)
{
   char *msg;
   msg = (char*)arg;
   cout<<msg<<endl;
}

int main()
{

   pthread_t t1,t2;

   t1 = pthread_create(&t1,NULL,fun,(void*)"THREAD1");
   t2 = pthread_create(&t2,NULL,fun,(void*)"THREAD2");

   pthread_join(t1,NULL);
   pthread_join(t2,NULL);
  // sleep (2);
   return 0;
}

我将上面的代码更改为

   pthread_create(&t1,NULL,fun,(void*)"THREAD1");
   pthread_create(&t2,NULL,fun,(void*)"THREAD2");

现在我得到THREAD2 THREAD1但我需要THREAD1 THREAD2

现在我将代码更改为 >

pthread_create(&t1,NULL,fun,(void*)"THREAD1");
pthread_join(t1,NULL);    

pthread_create(&t2,NULL,fun,(void*)"THREAD2");
pthread_join(t2,NULL);

现在我的结果是正确的THREAD1 THREAD2

4

1 回答 1

3
t1 = pthread_create(&t1,NULL,fun,(void*)"THREAD1");

这不好。pthread_create返回一个整数返回码,而不是pthread_t. 您正在用不应该存在的东西覆盖t1and ,随后的调用可能会崩溃或产生其他不可预测的结果。t2pthread_join

int rc1 = pthread_create(...);
if (rc1 != 0) { 
  // handle error
}

还需要按照您定义的方式fun返回某些内容。或者将其返回类型更改为 void。

于 2013-03-03T12:38:25.863 回答