qt定时信号量_信号量及其使用和实现(超详细)

  • Post author:
  • Post category:其他

互斥锁,我们刚刚讨论过了,通常认为是最简单的同步工具。本节将会讨论一个更棒的工具,它的功能类似于互斥锁,但是它能提供更为高级的方法,以便进程能够同步活动。

一个信号量 S 是个整型变量,它除了初始化外只能通过两个标准原子操作:wait () 和 signal() 来访问:

操作 wait() 最初称为 P(荷兰语proberen,测试);

操作 signal() 最初称为 V(荷兰语verhogen,增加);

可按如下来定义wait ():

wait(S){

while (S <= 0)

;// busy wait

S–;

}

可按如下来定义signal():

signal(S) {

S++;

}

在 wait() 和 signal() 操作中,信号量整数值的修改应不可分割地执行。也就是说,当一个进程修改信号量值时,没有其他进程能够同时修改同一信号量的值。另外,对于 wait(S),S 整数值的测试(S < 0)和修改(S–)也不能被中断。

首先,我们看看如何使用信号量。

信号量的使用

操作系统通常区分计数信号量与二进制信号量。计数信号量的值不受限制,而二进制信号量的值只能为 0 或 1。因此,二进制信号量类似于互斥锁。事实上,在没有提供互斥锁的系统上,可以使用二进制信号量来提供互斥。

计数信号量可以用于控制访问具有多个实例的某种资源。信号量的初值为可用资源数量。当进程需要使用资


版权声明:本文为weixin_34269309原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。