使用信号量实现简单双向同步
发布日期:2021-07-01 04:27:30
浏览次数:3
分类:技术文章
本文共 2305 字,大约阅读时间需要 7 分钟。
文章目录
1 用信号量实现简单双向同步
问题需求:
- 两个或多个任务相互协同合作完成某一项任务。 解决方案:
- 使用A信号量发送启动命令,再使用B信号量报告工作完成。 代码示例:
/** * @brief tOS应用示例 * @details * @author 01课堂 李述铜 http://01ketang.cc * @date 2017-06-01 * @version 1.0 * @copyright 版权所有,禁止用于商业用途 */#include "tinyOS.h"#include "app.h"#include "hal.h"static tTask task1; // 任务1结构static tTask task2; // 任务2结构static tTask task3; // 任务3结构static tTask task4; // 任务4结构static tTaskStack task1Env[TASK1_ENV_SIZE]; // 任务1的堆栈空间static tTaskStack task2Env[TASK2_ENV_SIZE]; // 任务2的堆栈空间static tTaskStack task3Env[TASK3_ENV_SIZE]; // 任务3的堆栈空间static tTaskStack task4Env[TASK4_ENV_SIZE]; // 任务4的堆栈空间int task1Flag; // 用于指示任务运行状态的标志变量int task2Flag; // 用于指示任务运行状态的标志变量int task3Flag; // 用于指示任务运行状态的标志变量int task4Flag; // 用于指示任务运行状态的标志变量tSem task1WaitSem;tSem task2WaitSem;/** * 任务的运行代码 * @param param 任务初始运行参数 */void task1Entry (void *param) { for (;;) { task1Flag = 1; tTaskDelay(1); tSemNotify(&task2WaitSem); tTaskDelay(1); tSemWait(&task1WaitSem, 0); task1Flag = 0; tTaskDelay(1); }}/** * 任务的运行代码 * @param param 任务初始运行参数 */void task2Entry (void *param) { for (;;) { tSemWait(&task2WaitSem, 0); task2Flag = 1; tTaskDelay(1); tSemNotify(&task1WaitSem); task2Flag = 0; tTaskDelay(1); }}/** * 任务的运行代码 * @param param 任务初始运行参数 */void task3Entry (void *param) { for (;;) { task3Flag = 1; tTaskDelay(1); task3Flag = 0; tTaskDelay(1); }}/** * 任务的运行代码 * @param param 任务初始运行参数 */void task4Entry (void *param) { for (;;) { task4Flag = 1; tTaskDelay(1); task4Flag = 0; tTaskDelay(1); }}/** * App的初始化 */void tInitApp (void) { halInit(); tSemInit(&task1WaitSem, 0, 1); tSemInit(&task2WaitSem, 0, 1); tTaskInit(&task1, task1Entry, (void *) 0x0, TASK1_PRIO, task1Env, sizeof(task1Env)); tTaskInit(&task2, task2Entry, (void *) 0x0, TASK2_PRIO, task2Env, sizeof(task2Env)); tTaskInit(&task3, task3Entry, (void *) 0x0, TASK3_PRIO, task3Env, sizeof(task3Env)); tTaskInit(&task4, task4Entry, (void *) 0x0, TASK4_PRIO, task4Env, sizeof(task4Env));}
典型案例:
参考资料:
转载地址:https://muzimin.blog.csdn.net/article/details/105732528 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
感谢大佬
[***.8.128.20]2024年04月22日 04时18分37秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
svn服务器安装
2019-05-01
spark 笔记1
2019-05-01
shell dirname basename
2019-05-01
未来已至,5G加持下的云游戏将走向何方?
2019-05-01
计算机网络 —— 网络层 1.
2019-05-01
Android 之 ContentProvider 与 ContentResolver
2019-05-01
【接口自动化】
2019-05-01
推荐一位川大零基础转行 Python 的人生勇士
2019-05-01
Python解惑之:True与False
2019-05-01
你要的微信小程序终于来了
2019-05-01
有了这些 Chrome 插件,效率提升10倍(建议收藏)
2019-05-01
Python 开发者都会遇到的错误:UnboundLocalError
2019-05-01
只有1%的程序员搞懂过浮点数陷阱
2019-05-01
一名 Google 工程师的大数据处理经验
2019-05-01
命名难,难于上青天
2019-05-01
没钱没公司,怎么做一款付费产品
2019-05-01
代码整洁之道-编写 Pythonic 代码
2019-05-01
树莓派程序开机自启动
2019-05-01
连锁门店无线通信方案
2019-05-01