什么是信号量?

在看一些资料的时候经常看到信号量这三个字,比如go语言里面的sema信号量,java里面的Semaphore,等等,那么什么是信号量?这个翻译怎么这么拗口?

比较正经的解释是这样的:

在计算机科学中,信号量(Semaphore)是一种用于控制对共享资源进行访问的同步原语。信号量可以被视为一种计数器,它用于管理对临界区的并发访问。

信号量的值可以是任意非负整数,通常用于表示资源的可用数量。当一个线程想要访问共享资源时,它必须先尝试将信号量的值减少1(原子操作),如果信号量的值变为负数,则线程将被阻塞,直到信号量的值大于等于0。

当一个线程完成了对共享资源的访问,它需要将信号量的值增加1,以便其他线程可以继续访问共享资源。如果有其他线程正在等待信号量,则其中一个线程将被唤醒,并被允许继续执行。

信号量的目的是确保对共享资源的有序访问,以避免竞争条件和数据不一致的情况发生。在并发编程中,信号量是一种常见的同步机制,可用于解决诸如互斥访问、缓冲区管理等问题。

那么比较通俗的解释就是:

信号量是一个从过去的文化中衍生出来的概念,比如有一个桥,一次只让过一辆车,怎么保证桥上只能有一个车呢?

这时候就派了调度工作人员(简称调度员),站在大桥上,当一辆车准备过桥的时候,会先咨询调度员“能过桥了吗?”,调度员说可以,你才能过去。

但是这样太麻烦了,所以就装了个自动的信号灯,当一辆车准备上桥的时候就看看信号灯,哦,亮的,可以过。如果他上了桥,灯就会熄灭,后面的车就开始等待,这个灯光亮或者不亮,我们称之为信号。

那么,信号量也是一样的,他是一个值,一般来说可以是0和1,或者其他的都行,只要你约定好就行,这个值,我们称之为“量”,这个量的功能是发送“信号”,因此我们称之为信号量

你可能感兴趣的:(golang)