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

10-11 01:36