【发布时间】:2013-01-16 21:44:10
【问题描述】:
如果我需要同步两个线程,这两个线程都在特定套接字上使用 send() 调用函数,那么扭曲 send() 函数的关键部分或研究使用互斥锁会更有用吗? (因为套接字是一个内核对象)
【问题讨论】:
标签: c++ sockets networking synchronization mutex
如果我需要同步两个线程,这两个线程都在特定套接字上使用 send() 调用函数,那么扭曲 send() 函数的关键部分或研究使用互斥锁会更有用吗? (因为套接字是一个内核对象)
【问题讨论】:
标签: c++ sockets networking synchronization mutex
假设 Windows 平台(这就是我们在临界区和互斥体之间进行选择的地方)。
Mutex(CreateMutex)要慢得多:锁定和解锁始终是系统调用,即使没有争用。不过,send 的成本可能足以让这种差异不明显。
正如另一个答案所指出的,互斥锁可以在进程之间共享(如果命名/重新打开或继承),并且关键部分是进程本地的。
【讨论】:
我假设这是关于 Windows 的(不记得在其他地方看到过关键部分)。
如果所有锁定都在一个进程中,那么使用哪个同步对象并不重要。如果你想跨进程边界锁定,那么你应该使用互斥锁,因为临界区只能在单个进程中工作,但命名互斥锁可以在多个进程之间共享。
【讨论】:
我认为,互斥锁应该工作得更快。
【讨论】: