我发现很少有文章谈论互斥体和关键部分之间的差异。 我遇到的主要差异之一是,互斥锁在内核模式下运行,而关键部分主要在用户模式下运行。
因此,如果是这种情况,那么在应用程序崩溃的情况下使用对系统有害的互斥的应用程序是不是?
感谢。
答案 0 :(得分:1)
当您需要在不同进程中的线程之间进行锁定或同步时,请使用Win32 Mutexes句柄。
当您需要在相同进程中的线程之间锁定时,请使用Win32 CRITICAL_SECTIONs。除非存在锁争用,否则它在时间上更便宜并且不涉及内核系统调用。无论如何,Win32中的Critical Section对象无法跨越进程边界。
“有害”是错误的用词。更像是“Win32互斥锁在性能方面比Win32关键部分略贵”。使用互斥锁而不是关键部分的正在运行的应用程序不会损害系统性能。它的运行速度会慢一点。但是,根据获取和释放锁的频率,差异甚至可能无法衡量。
我忘记了很久以前我做过的指标。最重要的是,EnterCriticalSection和LeaveCriticalSection API比WaitForSingleObject和ReleaseMutex的等效使用速度快10-100倍。 (大约1微秒对1毫秒)。