线程同步 - 关键部分还是互斥?

时间:2013-01-16 13:30:17

标签: c++ sockets networking synchronization mutex

如果我需要同步两个在特定套接字上都调用send()函数的线程,那么在send()函数上扭曲一个关键部分或者使用互斥量会更有用吗? (因为套接字是一个内核对象)

3 个答案:

答案 0 :(得分:4)

假设Windows平台(我们可以在关键部分和互斥体之间进行选择)。

Mutex(CreateMutex)速度慢:锁定和解锁始终是系统调用,即使没有争用。但是,send的成本可能足以使这种差异无法察觉。

正如另一个答案所指出的,互斥体可以在进程之间共享(如果命名/重新打开或继承),关键部分是进程本地的。

答案 1 :(得分:1)

我假设这是关于Windows的(不记得在其他地方看到关键部分)。

如果所有锁定都在一个进程中,那么您使用哪个同步对象并不重要。如果要锁定进程边界,则应使用互斥锁,因为临界区仅在单个进程内工作,但命名的互斥锁可以在多个进程之间共享。

答案 2 :(得分:-2)

我认为,互斥量应该更快。