Pthread C ++中的同步

时间:2012-04-29 17:50:43

标签: c++ multithreading synchronization pthreads

我已阅读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;
}

1 个答案:

答案 0 :(得分:1)

线程是异步执行的,正如有人在回答您提问链接时提到的那样。线程执行在create()之后立即开始。所以,在这一点上:

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

thread()已经在另一个线程中执行,可能在另一个核心上执行(但这并不重要)。如果您之后在for (;;);中添加main(),您仍会看到线程消息正在打印到控制台。

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