关于Mutex和Critical部分之间的区别存在一个现有问题,但它也不涉及Locks。
所以我想知道关键部分是否可以用于进程之间的线程同步。
此外,信号状态和非信号状态是什么意思
答案 0 :(得分:7)
在Windows中,(主要)在用户模式下实现关键部分,并且互斥锁将上下文切换到内核模式(这很慢)。如果线程在拥有互斥锁时终止,则说该互斥锁被放弃。互斥锁的状态设置为发出信号,下一个等待的线程获得所有权。在具有关键部分的相同情况下,所有其他线程将保持阻塞状态。无法命名关键部分,因此您无法使用它们来同步多个进程。
答案 1 :(得分:3)
关键部分不是内核对象。它们没有任何Handle标识。它们只能用于同步属于同一进程的线程。它们不能用于整个过程的同步。
CSingleLock(我假设您将此称为锁,在此上下文中)是使用RAII概念的包装类。它可以帮助您获取线程同步对象(在其构造函数中)并以简单的方式调用Lock和Unlock API。 (隐藏它正在使用的同步对象的所有内部细节。)
CSingleLock与Critical部分一起使用时,不能跨进程使用。可以将Mutex用于此目的。
当一个线程获得Mutex并且没有其他线程可以获取Mutex时,则说Mutex的状态处于Non-Signeled状态。 如果Mutex可用且没有获得线程,则它处于Signeled状态。
答案 2 :(得分:2)
CriticalSections正在进行中。命名互斥锁可以跨进程使用
锁是一个通用术语,因此我不知道你指的是哪个平台。例如,在C#中,一个锁原语是一个临界区。
答案 3 :(得分:2)
1)Critical Section是User和Interlocked-operations之间的桥梁。它使用inetrlocked-interchange操作来锁定和解锁线程。它比互斥锁更快。
2)Mutex是一个核心对象。它工作速度不快但有一些优点。首先,可以跨进程使用已命名的互斥锁。其次,如果线程被终止,那么此线程锁定的互斥锁将被解锁。