【发布时间】:2020-02-08 00:22:57
【问题描述】:
我正在使用套接字,这将在多线程环境中使用,其中许多线程将在同一个套接字上写入。 socket it-self 同步它还是我必须使用互斥锁?
如果另一个人在上面写,一个人会被阻塞吗?
【问题讨论】:
标签: c++ multithreading io
我正在使用套接字,这将在多线程环境中使用,其中许多线程将在同一个套接字上写入。 socket it-self 同步它还是我必须使用互斥锁?
如果另一个人在上面写,一个人会被阻塞吗?
【问题讨论】:
标签: c++ multithreading io
在不同步的情况下跨线程共享套接字是安全的,因为您的数据不会丢失,也不会导致程序崩溃;对于发送 UDP 数据包,这可能是合理的做法。对于 TCP,它通常不太有用,因为通过 TCP 流发送的数据的顺序没有明确定义,因此接收器可能很难或不可能正确解析。
请注意,如果多个线程对套接字的访问不同步,则很难安全地关闭套接字;您可能需要保持套接字打开直到所有线程退出,以避免在套接字关闭后访问套接字的文件描述符的可能性。
【讨论】:
对于单次写入,它是原子的。问题是接收端的消息排序(包括交错消息)。如果需要,则需要锁定。 如果您不想在锁上花费太多时间。您可以使用生产者/消费者模式来减少锁定时间。
【讨论】: