我写了一个程序来尝试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!
答案 0 :(得分:1)
OS与多线程程序之间的关系始终以主线程的生命周期为指导。当主线程结束时,所有对等线程都被操作系统杀死。
在你的情况下,主线程运行到它的结尾而不等待分离线程 - 因此分离线程被静默杀死。这甚至可以在对象线程有机会做任何事情之前发生。如果你想让你的对象线程保持活跃状态,你需要使用pthread_join()
在主线程中等待。
顺便说一句:像你在程序中那样忙碌等待通常不是保持线程活着的好方法。它会在没有做任何事情的情况下占用CPU。