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。andをそこにあってはならないもので上書きするt1と、後続の呼び出しがクラッシュするか、そうでなければ予測できない結果が生じる可能性があります。t2pthread_join

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

また、定義した方法で何かfunを返す必要があります。または、戻り値の型を void に変更します。

于 2013-03-03T12:38:25.863 に答える