大学生
最后登录1970-1-1
在线时间 小时
注册时间2017-2-13
|
楼主 |
发表于 2021-6-9 13:51:23
|
显示全部楼层
调试了一下,sem_send_thread_entry线程优先级比sem_rev_thread_entry 优先级高或者相同,则可以连续发出。否则就会出现间断
sem_send_thread_entry线程,这里进行自增
- static void sem_send_thread_entry(void* parameter)
- {
- while (1)
- {
- rt_sem_take(test_sem,RT_WAITING_FOREVER);
- ucValue[0]++;
- rt_thread_mdelay(100);
- ucValue[1]++;
- rt_sem_release(test_sem);
- rt_thread_yield();
- }
- }
复制代码 sem_rev_thread_entry 线程,进行比较
- static void sem_rev_thread_entry(void* parameter)
- {
- while (1)
- {
- rt_sem_take(test_sem,RT_WAITING_FOREVER);
- if(ucValue[0] == ucValue[1])
- {
- rt_kprintf("sem ok %d = %d\n",ucValue[0],ucValue[1]);
- }
- else
- {
- rt_kprintf("fail\n");
- }
- rt_sem_release(test_sem);
- rt_thread_mdelay(100);
- }
- }
复制代码 正常来说,自增的线程优先级高,不会被打断,这时候数据会连续增加;比较的线程优先级高,被打断,自增会有问题,出现间隔。
可是事实却正相反。
|
|