главное не продолжается после pthread - PullRequest
4 голосов
/ 06 декабря 2010

Я использую Ubuntu 10.10, Code :: Blocks с GCC 4.2.

Я написал такой код:

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

using namespace std;

void *thread1proc(void* param){
    while(true)
    cout << "1";

    return 0;
}

int main(){
    pthread_t thread1;

    pthread_create(&thread1,NULL,thread1proc,NULL);
    pthread_join(thread1,NULL);

    cout << "hello";
}

Main запускается, создает поток.Но то, что странно (для меня) главное, не продолжает работать.Я ожидаю увидеть сообщение "привет" на экране и в конце программы.Потому что в Windows, в Delphi у меня так получалось.Если «main» также является потоком, почему он не продолжает работать?Это про потоки POSIX?

Спасибо.

Ответы [ 2 ]

7 голосов
/ 06 декабря 2010

pthread_join будет блокироваться до тех пор, пока thread1 не завершится (вызов pthread_exit или возврат), что (поскольку он имеет бесконечный цикл) никогда не будет.

3 голосов
/ 06 декабря 2010

Останавливается, потому что вы вызываете pthread_join , а поток, к которому вы присоединяетесь, имеет бесконечный цикл.

По этой ссылке:

pthread_joinФункция () приостанавливает выполнение вызывающего потока до тех пор, пока целевой поток не завершится, если целевой поток уже не завершен.

...