当多个线程在同一个 MulticastSocket 上写入时,我是否需要进行某种互斥?
Do I need to put some sort of mutual exclusion while multiple threads are writing on the same MulticastSocket?
我有一些线程在同一个 MulticastSocket 上写入(取决于调度,可能会发生超过一个线程同时在 MulticastSocket 上写入)。我是否必须通过使用某种形式的锁定让他们在每个计时器上写入一个,或者 UDP 协议隐式地执行此操作?
其实和UDP没有任何关系。 documentation for MulticastSocket
并没有说它是线程安全的,所以你不能假设它是线程安全的。您不知道它不会更新可能被同时访问损坏的内部结构(例如出站缓冲区)。
如果所有线程都使用相同的 MulticastSaocket
实例,您需要确保它们不会同时调用其方法。您可以通过在实例上同步来轻松做到这一点:
synchronized (theSocket) {
theSocket.send(/*...*/);
}
我有一些线程在同一个 MulticastSocket 上写入(取决于调度,可能会发生超过一个线程同时在 MulticastSocket 上写入)。我是否必须通过使用某种形式的锁定让他们在每个计时器上写入一个,或者 UDP 协议隐式地执行此操作?
其实和UDP没有任何关系。 documentation for MulticastSocket
并没有说它是线程安全的,所以你不能假设它是线程安全的。您不知道它不会更新可能被同时访问损坏的内部结构(例如出站缓冲区)。
如果所有线程都使用相同的 MulticastSaocket
实例,您需要确保它们不会同时调用其方法。您可以通过在实例上同步来轻松做到这一点:
synchronized (theSocket) {
theSocket.send(/*...*/);
}