在下面的代码片段中,我需要保护connfd,因为它可以在accept()
调用中频繁更改。
void *deal_conn(void *arg){
int connfd;
connfd = *((int*)arg);
....
}
for(;;){
connfd = accept(...);
pthread_create(&thread, NULL, deal_conn, &connfd);
}
我不知道在哪里锁定和解锁这个变量的互斥锁。
有人能给我一些建议吗?
谢谢!
最佳答案
不要将connfd
的地址传递给每个线程,动态分配一个新的int
并传递该地址,当不再需要时让线程free()
它。由于线程不再共享同一资源,因此不需要互斥锁:
connfd = accept(...);
if (connfd != -1)
{
int* fd = malloc(sizeof(*fd));
if (fd)
{
*fd = connfd;
pthread_create(&thread, NULL, deal_conn, fd);
}
}
void *deal_conn(void *arg){
int connfd = *((int*)arg);
free(arg);
}
关于c - 在多线程程序中选择互斥锁和解锁位置的策略,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16613589/