对VxWorks中信号量的几点分析
1 计数信号量可以同时被多少个任务申请使用?
Sem = semCCreate(SEM_Q_PRIORITY, Count);
参数Count并不是表示这个信号量最多能够被Count个任务同时使用,而是表示在此计数信号量创建之后,在不释放这个信号量的情况下最多可以申请Count次这个信号量。如果Count=0,那这个信号量创建之后是不能申请的。它必须先释放,然后才能申请,释放多少个,就可以申请多少个(唯一的限制是不能超出函数semCCreate第二个参数的表示范围);
2 二进制信号量如何用于互斥和同步?
Sem = semBCreate(SEM_Q_PRIORITY, SEM_ FULL); ①
Sem = semBCreate(SEM_Q_PRIORITY, SEM_ EMPTY); ②
函数semBCreate的第二个参数是很重要的,它表示这个信号量在创建之初是否能立即被申请到。如果创建时参数是SEM_ FULL,就表示这个参数在创建之后就可以申请,一旦申请到,其它的任务就不能得到这个信号量,这就是互斥的过程;如果创建时参数是SEM_ EMPTY,就表示这个参数在创建之后是不可以申请的。要是任务1想申请这个信号量,就被停在申请的地方等待,等到任务2释放这个信号量时,任务1就可以立刻得到这个信号量(只要没有更高优先级的任务也等待这个信号量或者更高优先级的任务准备就绪),那么任务1就可以执行了。这就是互斥的过程,如图1(任务1的优先级高于任务2)。
图 1 任务间的同步
免责声明/版权申明 Passiontech
所有文章为网上搜集或私下交流学习之用,任何涉及商业盈利目的均不得使用,否则产生的一切后果由您自己承担!
本站仅仅提供一个观摩学习的环境,将不对任何资源负法律责任。所有资源请在下载后24小时内删除。
若无意中侵犯到您的版权利益,请来信联系我们,我们会在收到信息三天内给予处理!