C+++二进制信号量(1)

来源:互联网 发布:防范网络诈骗标语 编辑:程序博客网 时间:2024/06/07 06:28
virtual void functionName() = 0;这样形式的语句说明这个函数为纯虚函数,没有具体的函数体,只有一个函数名,函数体留给派生类来实现。如果一个类里面至少含有一个纯虚函数,那么,不可以用这个类定义对象。而且这个类的派生类必须重载全部纯虚函数(重载时不能指定为纯虚函数),才可以用来定义对象。
C++中可以中可以在函数的形参表中赋值。在函数声明或定义时,直接对参数赋值,该参数就是默认参数。在函数调用时,省略部分或全部参数,这时就会使用默认参数进行代替。
1)一般在声明函数时设置默认参数。若在函数声明和定义时都设置了默认参数,则以函数声明的默认参数为准
2)默认参数的定义顺序是自右向左,即如果设置了一个缺省值,其右边的参数也应该设定一个缺省值
3)默认参数的调用顺序是自左向右,在使用函数的时候,实参必须是由左自右书写的
二进制信号量,有时候被称为信号灯,是在多线程环境下使用的一种设施,是可以用来保证两个或多个关键代码段不被并发调用。在进入一个关键代码段之前,线程必须获取一个信号量;一旦该关键代码完成了,那么该线程必须释放信号量。其他想进入该关键代码段的线程必须等待直到第一个线程释放信号量。
二进制信号量只允许信号量为0或1
二进制信号量有两个作用
1.实现任务间的互斥;同一个任务获取和释放信号量,防止两个任务同时存取一个资源
2.实现任务间的同步;一个任务获取信号量,一个任务(或者中断)释放信号量
互斥信号量:是二进制信号量的一种特殊形式,在不需要用到删除安全/优先级反转/递归调用属性时,与二进制信号量的互斥功能相同。
特点:
1.只能用于任务间的互斥
2.只能由take它的任务give
3.不能在中断中take或give
4.可以递归调用,也就是同一个任务可以反复多次获取信号量。但释放和获取的信号量必须是成对的