线程可以暂停"暂停"在C?

时间:2016-09-24 13:16:14

标签: c multithreading pthreads

我写了一个程序来尝试C中的线程,但它很奇怪

它不会陷入困境(如while (1){}

我尝试用getchar暂停我的程序,使用scanf,有一段时间(1),它没有停止,为什么?

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <pthread.h>

void    *monthread(void *arg)
{
    char c;
    printf("Thread is in execution\n"); // this line is executed ! why not the others ?
    c = getchar();
    scanf(&c);
    while(1)
    {
        c = 'e';
    }

    (void) arg; // and can someone explain me this line please ? i was reading a tutorial
    pthread_exit(NULL); // and it says to add this but why ? what does it do  ?  thanks
}

int main(void){
    int i;
    pthread_t thread_h;

    printf("Thread creation in 3 2 1\n");

    if(pthread_create(&thread_h, NULL, monthread, NULL) == -1){
        perror("pthread_create");
        return EXIT_FAILURE;
    }
    i = getchar();
    printf("thread created\n");
    /*while (1){
      i = 0;
      }*/
}

fanks!

1 个答案:

答案 0 :(得分:1)

OS与多线程程序之间的关系始终以主线程的生命周期为指导。当主线程结束时,所有对等线程都被操作系统杀死。

在你的情况下,主线程运行到它的结尾而不等待分离线程 - 因此分离线程被静默杀死。这甚至可以在对象线程有机会做任何事情之前发生。如果你想让你的对象线程保持活跃状态​​,你需要使用pthread_join()在主线程中等待

顺便说一句:像你在程序中那样忙碌等待通常不是保持线程活着的好方法。它会在没有做任何事情的情况下占用CPU。