-
基本概念
互斥锁(Mutex):就像一把锁,任何时候只能有一个人(线程)拥有这把锁。其他人必须等着,直到这个人释放锁才能继续操作。互斥锁的作用是确保某段代码(或资源)同一时刻只有一个线程能够访问。
信号量(Semaphore):想象成一个计数器。它有一个数字,表示当前可以访问某个资源的“线程数量”。当数字是大于零时,就可以允许相应数量的线程进入临界区(即执行代码),每进一个线程就把数字减一,离开一个线程就加一。如果数字是零,那么其他线程就会被阻塞,直到有线程离开并释放信号量。
-
举个生活中的例子
互斥锁的例子:
假设你家只有一把钥匙,门上有一个锁。这个门代表共享资源,只有一个线程(或者说人)可以打开门进入。
当你锁上门时,其他人就不能进去,必须等你出来再进。
这个过程中,只有一个人能进入,而其他人必须排队等着。
信号量的例子:
想象有一个停车场,里面有 3 个停车位。你和其他 2 个人都需要停车。
假如停车场的“信号量”是 3,表示最多 3 个人可以同时停车。
当你停车后,信号量就变成 2,其他两个人可以继续停车,直到所有停车位都满了。
如果停车场满了,其他人就不能停车,得等到有人开走了(信号量变回大于 0)才能进入。
-
主要区别

-
生活中的应用场景
互斥锁(Mutex):
假设你正在写日记,这本日记本是共享的,其他人不能同时写。所以,你上锁后,其他人就不能写日记,必须等你写完并且“解锁”日记本。互斥锁保证同一时刻只有一个人能操作。信号量(Semaphore):
假设有 3 个共享的计算机,大家都可以用它来上网。如果只有 3 台计算机可用,信号量就是 3,表示最多有 3 个人可以同时使用。如果你在用,信号量会减少到 2,表示还有 2 台可用。如果有 4 个人想用,第四个人就得等,直到有一个人用完离开。 -
总结:
互斥锁(Mutex) 更像是“独占”的锁,一次只能有一个线程访问资源,其他线程必须等着。
信号量(Semaphore) 更像是一个限额计数器,它允许多个线程并发访问资源,但同时访问的线程数是有限的。
这样理解下来,你可以把互斥锁当做一个“只能有一个线程访问”的锁,而信号量当做“控制资源能被多少线程同时访问”的计数器。
6287

被折叠的 条评论
为什么被折叠?



