使用信号量实现简单双向同步
发布日期:2021-07-01 04:27:30
浏览次数:2
分类:技术文章
本文共 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 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
初次前来,多多关照!
[***.217.46.12]2024年04月28日 04时18分10秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
[收藏] FC交换机基础知识详解
2019-05-02
NVMe技术架构深度分析
2019-05-02
技术爆炸时代如何做技术的掌控者?
2019-05-02
机柜服务器如何选择,有哪些学问?
2019-05-02
Ceph存储系统Scrub机制分析
2019-05-02
OpenStack重组,敢问未来路在何方?
2019-05-02
CTO,是怎样炼成的?
2019-05-02
选择GPU服务器的基本原则
2019-05-02
关于数据中台系统,需要了解哪些技术?
2019-05-02
全面分析HDFS基本技术原理
2019-05-02
详解以太网介质技术发展史!
2019-05-02
详解“硬核”虚拟化技术SR-IOV原理
2019-05-02
SAP HANA解决方案设计10问详解
2019-05-02
详解内存运算架构、挑战和趋势
2019-05-02
Lightbits能否让NVMe/TCP新标准旗开得胜?
2019-05-02
数据中台,何为正解?!
2019-05-02
架构师进阶必看!架构师的工作都干些什么?
2019-05-02
详解RDMA架构和技术原理
2019-05-02
Virtio技术架构简明分析
2019-05-02
浅谈数据库高可用性(HA)技术
2019-05-02