我已阅读Posix threads tutorial中的同步主题。他们说函数pthread_join用于等待线程直到它停止。但为什么这个想法不起作用in that case?
这是我的代码:
#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;
}
答案 0 :(得分:1)
线程是异步执行的,正如有人在回答您提问链接时提到的那样。线程执行在create()
之后立即开始。所以,在这一点上:
int iret = pthread_create(&pt1, NULL, thread, NULL);
thread()
已经在另一个线程中执行,可能在另一个核心上执行(但这并不重要)。如果您之后在for (;;);
中添加main()
,您仍会看到线程消息正在打印到控制台。
你也误解了join()
的作用。它等待线程终止;由于你的线程没有做任何实际的工作,他们(很可能)会在你对它们调用join()
之前达到目的并终止。再一次:join()
不会在给定位置开始执行线程,而是等待它终止(或者只是返回,如果它已经终止)。