gpt4 book ai didi

c - 在多线程程序中选择互斥锁定和解锁位置的策略

转载 作者:太空宇宙 更新时间:2023-11-04 08:56:41 25 4
gpt4 key购买 nike

在下面的代码片段中,我需要保护 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/

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