Find centralized, trusted content and collaborate around the technologies you use most.
Teams
Q&A for work
Connect and share knowledge within a single location that is structured and easy to search.
我有一个非阻塞套接字将 udp 数据包发送到多个目标,并在同一个套接字上接收来自所有目标的响应。我正在一个专用线程中阅读,但写入(sendto)可以来自几个不同的线程。
这是一个没有任何额外同步的保险箱吗?我需要在持有互斥锁时写吗?或者,写入是否需要来自同一个线程并且我需要一个队列?
内核将为您同步对底层文件描述符的访问,因此您不需要单独的互斥锁。如果您使用 TCP,这种方法会出现问题,但由于我们谈论的是 UDP,这应该是安全的,尽管不一定是最好的方法。
您可以从单个或多个线程写入套接字。如果您从多个线程写入套接字,它们应该与互斥锁同步。相反,如果您的线程将它们的消息放在队列中并且单个线程从队列中拉出以执行写入,则对队列的读取和写入应该受到互斥锁的保护。
从不同线程读取和写入同一个套接字不会相互干扰。