gpt4 book ai didi

c - pthread_join 给出段错误

转载 作者:行者123 更新时间:2023-11-30 17:25:34 24 4
gpt4 key购买 nike

不知何故,我的代码返回了段错误。 sockfd 是一个 int 或文件描述符

pthread_t tid[4];
int err;
int k = 0;
while (k < 4) {
err = pthread_create(&tid[k], NULL, listen_connection, (void*) sockfd);
k++;
}
pthread_join(tid[0], NULL); // causes segmentation fault
pthread_join(tid[1], NULL);
pthread_join(tid[2], NULL);
pthread_join(tid[3], NULL);

return 0;

listen_connection 声明:

void * listen_connection(void *);

实际功能:

void * listen_connection(void *sockfd) {

int newsockfd, n;
// client address
struct sockaddr_in cli_addr;
socklen_t clilen;

newsockfd = accept(*(int*)sockfd, (struct sockaddr *) &cli_addr, &clilen);
...

编辑:我明白了。

而不是:

err = pthread_create(&tid[k], NULL, listen_connection, (void*) sockfd);

我把它改为:

err = pthread_create(&tid[k], NULL, listen_connection, (void*) &sockfd);

最佳答案

*(int *)sockfd 是错误的。 sockfd 不是指针,因为您将 int 传递给了 pthread_create()。将 &sockfd 传递给 pthread_create(),或者像这样 (int) sockfd 进行强制转换。

关于c - pthread_join 给出段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27032865/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com