C 为什么pthread_join()之后的代码没有执行?
我正在为我拥有的IRC服务器编写一个简单的tcp客户端。因此,我通过一个writer线程和一个receiver线程来实现这一点,但是在用户退出会话后,程序会在线程停止后停止所有执行,并在控制台中显示类似scanf()的输出C 为什么pthread_join()之后的代码没有执行?,c,pthreads,C,Pthreads,我正在为我拥有的IRC服务器编写一个简单的tcp客户端。因此,我通过一个writer线程和一个receiver线程来实现这一点,但是在用户退出会话后,程序会在线程停止后停止所有执行,并在控制台中显示类似scanf()的输出 void senderThread(void* context){ for(;;){ //setup here //gets user input and stores into char* msg if(strcmp(msg, "quit") =
void senderThread(void* context){
for(;;){
//setup here
//gets user input and stores into char* msg
if(strcmp(msg, "quit") == 0){
printf("quitting...\n");
free(msg);
shutdown(clientdata->sockfd, SHUT_RDWR);
return NULL;
}else {
write(clientdata->sockfd, msg, strlen(msg));
write(clientdata->sockfd, "\n", strlen("\n"));
free(msg);
}
}
return NULL;
}
int main(int argc, char* argv[]){
//setup stuff here
pthread_t thread_id[1];
pthread_create(&thread_id[1], NULL, senderThread, (void *) &clientdata);
printf("creating threads...\n");
pthread_join(thread_id, NULL); //for(;;) loop here
shutdown(sockfd, SHUT_RDWR);
free(username);
return 0;
}
这是程序代码的一部分,但是当我在stdin中键入'quit'时,什么也没有发生。printf和shutdown都会启动,但我只剩下了等待输入的终端和没有实际关闭的程序。执行pthread_join()后没有任何代码。为什么会这样
&thread\u id[1]
是指向单元素数组中第二个元素的指针。这将超出范围,并导致未定义的行为
然后调用pthread\u join
传递指向数组中第一个未初始化元素的指针。再次导致未定义的行为
我建议您使用单个pthread\u t
值(而不是数组),并在pthread\u create
和pthread\u join
调用中使用运算符的地址:
pthread_t thread_id;
pthread_create(&thread_id, ...);
pthread_join(&thread_id, NULL);
&thread\u id[1]
是指向单元素数组中第二个元素的指针。这将超出范围,并导致未定义的行为
然后调用pthread\u join
传递指向数组中第一个未初始化元素的指针。再次导致未定义的行为
我建议您使用单个pthread\u t
值(而不是数组),并在pthread\u create
和pthread\u join
调用中使用运算符的地址:
pthread_t thread_id;
pthread_create(&thread_id, ...);
pthread_join(&thread_id, NULL);
始终使用
-Wall
编译并消除从gcc获得的警告墙。始终使用-Wall
编译并消除从gcc获得的警告墙。