【问题标题】:Mutual exclusion and C Sockets互斥和 C 套接字
【发布时间】:2009-05-18 08:58:03
【问题描述】:

我正在维护一个现有系统,其中以前的开发人员对每个操作都在套接字上执行,需要多个线程来读取和写入,以前的开发人员已经在控制和互斥锁下执行了 io 操作。是否需要相互排除 C 套接字 IO 操作?或者由于套接字是全双工的,使用互斥体是多余的?只有一个线程

毫无疑问,线程将对象放入的处理队列是共享内存,必须注意相互排斥它。

【问题讨论】:

    标签: c tcp mutual-exclusion


    【解决方案1】:

    默认情况下,套接字不是线程安全的。因此,如果您有多个线程读取和写入它们,您将需要以某种方式锁定访问(例如使用互斥锁)。

    【讨论】:

      【解决方案2】:

      在 TCP (AF_INET, SOCK_STREAM) 的情况下,可以有一个不同步的读取线程 (recv) 和写入线程 (send)。

      但是根据您的描述,不清楚在您的代码中使用互斥锁的目的是什么 - 看起来“以前的开发人员”同步网络操作不是因为套接字,而是由于您的应用程序协议的要求。 许多应用程序以这种方式执行通信:

      lock
      -> send request
      <- recv reply
      unlock
      
      lock
      -> send request
      <- recv reply
      unlock
      

      这里需要锁定(如果涉及多个线程)以同步发送/接收对,否则您的应用程序协议可能会变成一堆不匹配的请求和回复。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-06-06
        • 1970-01-01
        • 2018-05-23
        • 1970-01-01
        • 1970-01-01
        • 2010-11-25
        • 2013-07-07
        • 1970-01-01
        相关资源
        最近更新 更多