信号量可以设置一个数值,允许最多有几个任务同时访问共享资源。比如说设置这个数值是5,那么最多可以有5个任务同时访问共享资源;每个任务在获得信号量的时候把信号量计数器减去1,这样在第5个任务获得信号量的时候,计数器是0,当第 6 个任务要去访问信号量的时候,就只能等待了,等到之前的任务发出来一个信号出来的时候,这样第六个任务才能去访问共享资源。
等待信号量的任务在有信号以后也是按照等待列表中优先级最高的任务先得到信号处理。
信号量、互斥信号量,都是用来同步任务对共享资源的访问,防止冲突而设立的。事件标志组--它是用来同步几个任务,协同几个任务工作而设立的。打个比方说,你现在要打电话,打电话这个任务要执行,你必须有手机,你首先要执行买手机这个任务,你手机有了,没有花费最终的打电话还是无法执行,也就是说打电话这个任务要等买手机这个任务和充话费这个任务完成以后,你才能够去执行打电话这个任务。时间标志组就是用来标志买手机或者充话费这两个任务完成了没有。完成了的话他们会相应地置位事件标志组里面的某些标志位。 再比如说,你想要读取数据,你你肯定要等到数据采集更新好后,你去读取才有意义,所以数据采集和读取数据这两个任务也可以用 事件标志组来实现。当然事件标志组不一定只用于两个任务之间,通过对头文件件的修改,可以让事件标志组达到32位,你可以用事件标志组来协同多个任务的合理运行,达到你预期达到的目标!事件标志组就是专门为这个而设立的。
每一个时间标志组都维护它自己的一个等待队列的双向链表。每个事件标志组的结点里面都有一个指针和相应的任务控制块ECB一一对应。