-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()已经在另一个线程中执行,可能在另一个内核上(但这并不重要)。如果你在那之后for (;;);在你的main()右边添加一个,你仍然会看到线程消息被打印到控制台。

你也误解了什么join()。它等待线程终止;由于您的线程不做任何实际工作,因此它们(很可能)会在您调用join()它们之前达到其目的并终止。再一次:join()不会在给定位置开始执行线程,而是等待它终止(或者只是返回,如果它已经终止)。

于 2012-04-29T18:26:04.897 回答