繁体   English   中英

在这种特殊情况下,我应该使用spin_lock还是Mutex_lock吗?

[英]Should I use spin_lock or mutex_lock for this particular situation?

在我的Linux应用程序中,我有两个线程都尝试使用相同的UDP客户端套接字发送UDP广播数据包(大约50-500字节)。 他们大约每2-3秒执行一次此操作。 在这种情况下,可以在“ send(...)”子句周围放置pthread_mutex_lockpthread_spin_lock 理论上说,如果这是一个非常小的操作,则pthread_spin_lock会更有效率(尽管在这么短的时间内会消耗大量CPU)。 但是,如果其操作较大,则pthread_mutex_lock更好。

是否正在发送UDP数据包“足够小”以保证可以使用pthread_spin_lock进行授权,还是我仍应坚持使用pthread_mutex_lock

谢谢

如果唯一需要锁定的原因是它们都在同一套接字上发送,那么根本就不需要锁定-两个线程同时在同一UDP套接字上调用send()是可以接受的。 发送的数据不会被交错。

通过使用自旋锁而不是互斥锁可以避免在发生拥塞时避免进入系统调用。 如果您在关键部分使用网络层,则无论如何都会进入系统调用。 据我所知,在这里使用自旋锁没有多大意义。

在自旋锁中包装系统调用是一个坏主意。 无论如何,在用户空间应用程序中使用自旋锁的优点是值得怀疑的。 Linux的互斥体实现(使用futexes )非常有效-尤其是在无争议的锁的情况下,在设计良好的MT应用程序中几乎总是如此。

其他人指出, send函数本身是线程安全的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM