当线程内的循环导致程序阻塞时(C)
线程的要点是能够同时运行多个代码块。当这种可能性出现在我脑海中时,我想到的第一件事是同时运行两个无限循环。在我尝试使用两个线程之前,我尝试使用一个线程,但没有成功 所以我有一条这样的线:当线程内的循环导致程序阻塞时(C),c,multithreading,C,Multithreading,线程的要点是能够同时运行多个代码块。当这种可能性出现在我脑海中时,我想到的第一件事是同时运行两个无限循环。在我尝试使用两个线程之前,我尝试使用一个线程,但没有成功 所以我有一条这样的线: void *myThread(void *args) { sleep(0.1); while (1) { } return NULL; } 我正在创建这样的线程: pthread_t thread_id; printf("Before Thread\n"); pthread_
void *myThread(void *args) {
sleep(0.1);
while (1) {
}
return NULL;
}
我正在创建这样的线程:
pthread_t thread_id;
printf("Before Thread\n");
pthread_create(&thread_id, NULL, myThread, args);
pthread_join(thread_id, NULL);
printf("After Thread\n");
当我运行此命令时,
“线程后”
不会打印!为什么会这样?这对我来说毫无意义。因为pthread\u join(thread\u id,NULL)代码>等待线程完成。运行而(1){}
循环的线程永远不会结束。您可能需要查找异步functions@Brian不,我不想要异步函数,我需要pthread\u连接(thread\u id,NULL)代码>行吗@Martineralecký@MattX如果你不把它放在那里,线程启动后会立即打印After Thread消息,它会继续运行。如果你在myThread
中将代码更改为循环10次,然后打印出一些内容或休眠,然后返回,你会等待它完成main中对pthread_join
的调用。然后你的程序就可以退出了。如果您只需保持myThread
原样并调用pthread\u join
,您的程序将不会等待线程完成并立即退出。@MattX您是否需要它取决于您正试图做什么,我们不知道。您应该做什么取决于这个线程正在做什么,以及它与整个程序正在做什么的关系。