|
本帖最后由 cout 于 2014-9-24 11:21 编辑
- task1()
- {
- while(1)
- {
- if(get_sem(sem_name,without_pendding))
- {
- do();
- }
- do_something();
- delay(1);
- }
- }
-
- task2()
- {
- while(1)
- {
- if(condition)
- put_sem(sem_name);
- do_something();
- delay(10);
- }
- }
复制代码
如上代码中,两个任务通过发送信号量来通信,task2的condition条件成立时,向task1发送sem_name信号量。task1 在获取信号量时是不会阻塞的,task2在发送信号量时也不会被阻塞,因为,task2在执行时,task1 肯定在执行delay(1);操作(task2有可能会被挂起,但是不会阻塞);这里还隐含一个条件是:task1的周期比task2的周期短。这样看来无论task1 与 task2 的优先级谁高谁低,一般都不会引起执行的变化。个人感觉完全等价于这一段代码:
- task1()
- {
- while(1)
- {
- if(global_var)
- {
- global_var = 0;
- do();
- }
- do_something();
- delay(1);
- }
- }
-
- task2()
- {
- while(1)
- {
- if(condition)
- global_var =1;
- do_something();
- delay(10);
- }
- }
复制代码 不过还是有人喜欢在代码里创建一大堆信号量,请大家指教。
|
|