2

while ループの終了について質問があります。文字列を出力する 2 つのスレッドを作成するコードを書いています。main() 部分は 500 ミリ秒ごとにドット (".") を出力する必要があります。2 番目のスレッドが終了した後に while ループを終了して、次のような出力を得る方法を教えてください: ...Hello...World....THE END

ご協力ありがとうございました。

int main() 
{
    int mls = 0.5 ; 
    pthread_t thread1;
    pthread_t thread2;

    struktura param1 = { "Hello", 2};
    struktura param2 = { "World", 4};

    pthread_create( &thread1, NULL, thread, &param1);
    pthread_create( &thread2, NULL, thread, &param2);

    while(1)
    {
        printf(".");
        fflush(stdout);
        sleep(mls); 
    }

    pthread_join(thread1, NULL);
    pthread_join(thread2, NULL);

    printf("THE END\n");
    return 0;
}
4

3 に答える 3

2

この問題について考えた結果、両方のスレッド (スレッド "Hello" とスレッド "World") がなくなったことを確認することが主なユースケースである場合、両方で使用する以外に方法はないという結論に達しましたpthread_join()

呼び出し元のスレッドをブロックするのでpthread_join()、自然な結論は、3 番目のスレッド (スレッド "Dots") を開始して、要求どおりにドットを描画することです。

この 3 番目のスレッド (スレッド "Dots") は、main()への 2 つのブロッキング呼び出しから戻った後、他の 2 つのスレッド (スレッド "Hello" とスレッド "World") が終了するのを待っている -threadによって通知されpthread_join()ます。これが行われると、3 番目のスレッド (スレッド "Dots") が単純に終了します。後者は、誰も終了を待っていないため、分離して実行できます。

于 2013-04-03T09:10:26.617 に答える
-1

terminate c threadでわかるように、 pthread_exit を使用してみてください。

于 2013-04-02T23:26:09.987 に答える