дистанционная функция с pthread - PullRequest
2 голосов
/ 22 мая 2010

Я написал некоторый код на c, используя pthread (сначала я настроил компоновщик и компилятор в IDE затмения).

#include <pthread.h>
#include "starter.h"
#include "UI.h"

Page* MM;
Page* Disk;
PCB* all_pcb_array;

void* display_prompt(void *id){

    printf("Hello111\n");

    return NULL;
}


int main(int argc, char** argv) {
    printf("Hello\n");
    pthread_t *thread = (pthread_t*) malloc (sizeof(pthread_t));
    pthread_create(thread, NULL, display_prompt, NULL);
    printf("Hello\n");
    return 1;
}

это прекрасно работает. Однако, когда я перемещаю display_prompt в UI.h вывод "Hello111" не печатается.

Кто-нибудь знает, как это решить? Elad

1 Ответ

2 голосов
/ 22 мая 2010

Когда возвращается main, все потоки завершаются. Если созданная вами нить ничего не напечатала в этот момент, она этого не сделает. Это зависит от случая, а не от места реализации функции.

Чтобы main дождался завершения потока, используйте pthread_join:

int main(int argc, char** argv) {
    printf("Hello\n");
    pthread_t thread;
    pthread_create(&thread, NULL, display_prompt, NULL);
    printf("Hello\n");
    pthread_join(thread);
    return 0;
}

Кстати:

  • Нет необходимости в malloc ing; вы можете просто создать thread в стеке.
  • Вы должны вернуть 0 из функции main, если она завершилась без ошибки.
...