与信号量不同,互斥量只能取两个值,通常称为已锁定或已解锁。此外,互斥量具有所有权属性,即只有锁定互斥量的线程才能将其解锁。您可以将其想象为一种带有单把钥匙的锁定/解锁机制,当线程希望访问单个对象(例如代码段或资源)时,需要先获取一个已解锁的互斥量并将其锁定,然后再访问该对象。如果尝试获取互斥量的线程发现该互斥量已被锁定,则该线程将被阻塞,并一直等待,直到锁定该互斥量的线程将其解锁为止。
互斥量的典型用途是保护可从多个线程访问的代码临界区。临界区是一段需要完成且不被其他线程中断的代码,否则该临界区内的全局/静态数据可能会被错误呈现或损坏。
互斥量具有以下属性:
下图显示了互斥量的属性
