-3

Posix スレッド チュートリアルで同期スレッドについて読みました。関数 pthread_join は、スレッドが停止するまで待機するために使用されると言われています。しかし、その場合、なぜこの考えがうまくいかないのでしょうか?

これが私のコードです:

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

using namespace std;

int a[5];

void* thread(void *params)
{
    cout << "Hello, thread!" << endl;

    cout << "How are you, thread? " << endl;

    cout << "I'm glad to see you, thread! " << endl;
}

void* thread2(void *params)
{
    cout << "Hello, second thread!" << endl;

    cout << "How are you, second thread? " << endl;

    cout << "I'm glad to see you, second thread! " << endl;

//    for (;;);

}

int main()
{
    pthread_t pt1, pt2;

    int iret = pthread_create(&pt1, NULL, thread, NULL);
    int iret2 = pthread_create(&pt2, NULL, thread2, NULL);

    cout << "Hello, world!" << endl;

    pthread_join(pt1, NULL);
    cout << "Hello, middle!" << endl;

    pthread_join(pt2, NULL);

    cout << "The END" << endl;
    return 0;
}
4

1 に答える 1

1

あなたがリンクした質問への回答で誰かがすでに言及したように、スレッドは非同期で実行されます。スレッドの実行は、その直後に開始されますcreate()。したがって、この時点で:

int iret = pthread_create(&pt1, NULL, thread, NULL);

thread()おそらく別のコアで、別のスレッドですでに実行されています(ただし、実際には問題ではありません)。その後に a を追加すると、スレッド メッセージがコンソールに出力されますfor (;;);main()

また、何が何をするのか誤解してjoin()います。スレッドの終了を待ちます。スレッドは実際の作業を行わないため、(ほとんどの場合) 終了に達し、呼び出す前に終了join()します。繰り返しjoin()ますが、指定された場所でスレッドの実行を開始しませんが、スレッドが終了するのを待ちます (または、既に終了している場合は単に戻ります)。

于 2012-04-29T18:26:04.897 に答える