【问题标题】:mutithread socket writing is safe without mutex没有互斥锁的多线程套接字写入是安全的
【发布时间】:2020-02-08 00:22:57
【问题描述】:

我正在使用套接字,这将在多线程环境中使用,其中许多线程将在同一个套接字上写入。 socket it-self 同步它还是我必须使用互斥锁?
如果另一个人在上面写,一个人会被阻塞吗?

【问题讨论】:

标签: c++ multithreading io


【解决方案1】:

在不同步的情况下跨线程共享套接字是安全的,因为您的数据不会丢失,也不会导致程序崩溃;对于发送 UDP 数据包,这可能是合理的做法。对于 TCP,它通常不太有用,因为通过 TCP 流发送的数据的顺序没有明确定义,因此接收器可能很难或不可能正确解析。

请注意,如果多个线程对套接字的访问不同步,则很难安全地关闭套接字;您可能需要保持套接字打开直到所有线程退出,以避免在套接字关闭后访问套接字的文件描述符的可能性。

【讨论】:

    【解决方案2】:

    对于单次写入,它是原子的。问题是接收端的消息排序(包括交错消息)。如果需要,则需要锁定。 如果您不想在锁上花费太多时间。您可以使用生产者/消费者模式来减少锁定时间。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-06-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多