信号量的物理意义是当信号量值大于零时表示有什么? ;当信号量值小于零时,其绝对值为多少 。
信号量的物理意义是当信号量值大于零时表示可用资源的数目;当信号量值小于零时,其绝对值为因请求该资源而被阻塞的进程数目 。
在进入一个关键代码段之前,线程必须获取一个信号量;一旦该关键代码段完成了,那么该线程必须释放信号量。其它想进入该关键代码段的线程必须等待直到第一个线程释放信号量。
扩展资料:
抽象的来讲,信号量的特性如下:信号量是一个非负整数(车位数),所有通过它的线程/进程(车辆)都会将该整数减一(通过它当然是为了使用资源),当该整数值为零时,所有试图通过它的线程都将处于等待状态。
在信号量上两种操作: Wait(等待) 和 Release(释放)。当一个线程调用Wait操作时,它要么得到资源然后将信号量减一,要么一直等下去(指放入阻塞队列),直到信号量大于等于一时。Release(释放)实际上是在信号量上执行加操作,对应于车辆离开停车场,该操作之所以叫做“释放”是因为释放了由信号量守护的资源。
参考资料来源:
系统中可用资源数目,因请求该资源而阻塞的数目。
信号量比文件锁有优势,效率不是高那么一点,起码不用打开文件关闭文件这些耗时间的工作。但是一旦锁定,若在解锁之前出现程序崩溃等segment fault问题,将直接导致锁定的信号量无法恢复,形成永久占用。 文件锁则没有这个问题,进程的退出将导致文件描述符关闭,在该描述符上进行的锁定操作就自行解除。
扩展资料:
注意事项:
信号量程序实例:现在创建多个线程使用同一信号量,让其打印出1来,观察打印结果,总结规律。
程序思路:创建一个信号量,通常其初始值为0,然后释放掉一个信号量,于是Wait函数返回,最先等待的线程将开始运行。在打印完1后释放掉2个信号值,接着会有两个线程开始运行,如细胞分裂,其打印个数将会以2倍速度扩张。
参考资料来源:百度百科-信号量
参考资料来源:百度百科-信号量机制
2.因请求该资源而阻塞的数目