我有一个非阻塞套接字将udp数据包发送到多个目标,并在同一个套接字上接收来自所有目标的响应。我正在读一个专用线程,但写(sendto)可以来自几个不同的线程。
这是否安全,没有任何额外的同步?拿着互斥锁时我需要写吗?或者,写入是否需要来自同一个线程,我需要一个队列?
答案 0 :(得分:6)
内核将为您同步对底层文件描述符的访问,因此您不需要单独的互斥锁。如果您使用TCP,这种方法会出现问题,但由于我们讨论的是UDP,这应该是安全的,但不一定是最好的方法。
答案 1 :(得分:-1)
您可以从单个或多个线程写入套接字。如果从多个线程写入套接字,则应与互斥锁同步。相反,如果您的线程将其消息放入队列中,并且单个线程从队列中拉出来进行写入,则对队列的读取和写入应受到互斥锁的保护。
从不同的线程读取和写入同一个套接字不会互相干扰。