linux--信号量

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Ferlan/article/details/84426362

信号量

什么是信号量?

信号量是进程间通信方式之一,用于实现进程间的同步与互斥。

同步与互斥

同步:保证对临界资源访问的时序可控性,两个或两个以上的进程或线程在运行过程中协同步调,按预定的先后次序运行.

比如只有超市进货之后我才能去消费。

互斥:保证同一时间 对临界资源访问的唯一访问性。当一个进程再对临界资源进行操作时,其他的进程不能再操作该资源。

比如我在超市要买一包方便面(方便面已经在我手上),那么其他人就不能够买这包面。

显然,同步是一种更为复杂的互斥,而互斥是一种特殊的同步。也就是说互斥是两个任务之间不可以同时运行,他们会相互排斥,必须等待一个线程运行完毕,另一个才能运行,而同步也是不能同时运行,但他是必须要安照某种次序来运行相应的线程(也是一种互斥)!因此互斥具有唯一性和排它性,但互斥并不限制任务的运行顺序,即任务是无序的,而同步的任务之间则有顺序关系。

信号量的本质及基本功能

信号量本质上是一个资源计数器。用于标记一个临界资源是否有进程访问。

进程在操作临界资源之前先去查看一下信号量,如果信号量为0(没有资源),则阻塞等待。如果信号量为1,则可以访问资源。

获取临界资源就是对信号量进行-1(剩余为0)操作,退出临界资源就是对信号量进行+1(有剩余资源)操作。

信号量也是一个临界资源

信号量的信号量作为进程间的通信方式,意味着大家都能访问到信号量,不能有多个进程同时对信号量进行加减操作,所以信号量实际上也是一个临界资源

对信号量这个临界资源操作是不会出现问题的,因为,信号量的操作是一个原子操作.

猜你喜欢

转载自blog.csdn.net/Ferlan/article/details/84426362