引用自维基百科

互斥锁(英语:英语:Mutual exclusion,缩写 Mutex)是一种用于多线程编程中,防止两条线程同时对同一公共资源(比如全局变量)进行读写的机制。该目的通过将代码切片成一个一个的临界区域(critical section)达成。临界区域指的是一块对公共资源进行访问的代码,并非一种机制或是算法。一个程序、进程、线程可以拥有多个临界区域,但是并不一定会应用互斥锁。

信号量(英语:Semaphore)

又称为信号标,是一个同步对象,用于保持在0至指定最大值之间的一个计数值。当线程完成一次对该semaphore对象的等待(wait)时,该计数值减一;当线程完成一次对semaphore对象的释放(release)时,计数值加一。当计数值为0,则线程等待该semaphore对象不再能成功直至该semaphore对象变成signaled状态。semaphore对象的计数值大于0,为signaled状态;计数值等于0,为nonsignaled状态.

互斥锁的作用

在多线程编程中,多条线程对同一内存区域进行操作时,会产生意料之外的情况发生。这时候就需要用到互斥锁,线程对当前需要操作的内存区域进行加锁操作,避免其他线程进行相同的访问,导致错误的结果。当其他线程需要访问这片区域时,如果区域已经加锁了,就会进入到挂起队列处于挂起状态,等到这片区域解锁后再唤醒。
简而言之,互斥锁就是为了避免多个线程对同一区域进行访问而采取的措施。