用信号量实现任务间单向同步
文章目录
- 1 用信号量实现任务间单向同步
- 1.1 问题需求
- 1.2 解决方案
- 1.3 其它方案
- 1.4 典型案例
1 用信号量实现任务间单向同步
1.1 问题需求
某一任务必须等待另一任务允许后才能继续往下运行。
1.2 解决方案
使用信号量控制任务的等待与恢复运行。
/*** @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 syncSem;/*** 任务的运行代码* @param param 任务初始运行参数*/
void task1Entry (void *param) {for (;;) {task1Flag = 1;tTaskDelay(1);task1Flag = 0;tTaskDelay(1);tSemNotify(&syncSem);}
}/*** 任务的运行代码* @param param 任务初始运行参数*/
void task2Entry (void *param) {for (;;) {tSemWait(&syncSem, 0);xprintf("Hello, task2!\n");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(&syncSem, 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));
}
1.3 其它方案
1.4 典型案例
参考资料:
- 手把手教你学用嵌入式操作系统
用信号量实现任务间单向同步相关推荐
- 铂金04:令行禁止-为何说信号量是线程间的同步利器
欢迎来到<并发王者课>,本文是该系列文章中的第17篇. 在并发编程中,信号量是线程同步的重要工具.在本文中,我将带你认识信号量的概念.用法.种类以及Java中的信号量. 信号量(Semap ...
- VxWorks中信号量实现任务间通信与同步机制分析
引 言 多任务内核.任务调度机制.任务间通信和中断处理机制,这些都是VxWorks运行环境的核心.多任务处理和任务间通信是实时操作系统的基石.一个多任务环境允许将一个实时应用构造成一套独立任务的集合, ...
- 线程间通信————同步
同步 是指多个任务按照约定的先后次序 相互配合完成一件事情 信号量: 由信号量决定 线程是继续执行 还是阻塞等待 信号量代表某种资源 其值表示系统中该资源的数量 信号量是一个受保护的量 只 ...
- C++信号量实现线程间同步,windows使用SetEvent,linux使用sem_t,QT测试
目录 windows使用CreateEvent.SetEvent.ResetEvent.WaitForSingleObject linux使用sem_init.sem_wait.sem_trywait ...
- 临界区、事件、互斥量、 信号量--四种控制多线程同步与互斥的方法
// MultiThread.cpp : 定义控制台应用程序的入口点. //#include "stdafx.h"#include <Windows.h> #inclu ...
- 系统进程间的同步机制
说出你所知道的各类linux系统的各类同步机制(重点),什么是死锁?如何避免死锁 linux系统的通讯机制,主要是指进程间通讯,其实通讯就是进程同步的手段.如果问进程间同步,见问题7,这里要说的lin ...
- java 进程同步代码_java 实现进程间的同步(源代码)
操作系统课程设计:实现进程间的同步. 有问题留言 import java.util.concurrent.Semaphore; /******** 信号量 *******/ class Sign { ...
- java 信号量 互斥锁_线程同步(互斥锁与信号量的作用与区别)
"信号量用在多线程多任务同步的,一个线程完成了某一个动作就通过信号量告诉别的线程,别的线程再进行某些动作(大家都在semtake的时候,就阻塞在 哪里).而互斥锁是用在多线程多任务互斥的,一 ...
- goldengate for mysql_GoldenGate for mysql to mysql:单向同步
GoldenGate for mysql to mysql:单向同步 GoldenGate用于在各种企业系统间以亚秒级速度复制和集成事务数据,是同类最佳的.易于部署的产品.GoldenGate 可以灵 ...
最新文章
- java将0到9随机输出_生成0到9之间的随机整数
- c 语言cad 二次开发,c#对AutoCAD二次开发
- NOIP2016普及组复赛第一题的AC程序加题解pascal
- schema get_ddl
- leetcode 224. Basic Calculator | 224. 基本计算器(中缀表达式求值)
- 搜索2.0:利用用户点击记录改善搜索结果
- [SpringSecurity]HelloWorld入门案例
- LeetCode题库整理【Java】—— 1两数之和
- AI 对不起 我还爱着你
- 4k电视色彩表现测试软件,选高端4K电视 4K测试图帮你轻松分辨
- 标准库:turtle --- 海龟绘图
- Spring Security 实战:实现自定义退出登录
- html大风效果,使用jquery.windy制作风吹卡片的效果 | jQuery教程
- 通过LiveNVS(免费使用)集中化管理多个LiveNVR-数据透传摆脱局域网的公网IP限制
- 表单ajax提交插件,详解javascript表单的Ajax提交插件的使用
- C语言数据的输入与输出
- 厦门计算机中专学校,厦门十大中专学校
- 申宝证券-银行股午后集体异动拉升
- MiiX·阿希全球区块链黑客马拉松大赛 获奖选手专访
- 芦荟的种类和价值,你都了解吗?
热门文章
- 不越狱换壁纸_9 款优质、免费越狱插件
- linux下使用split 来分割大文件
- 【体验】朗读机器人是如何炼成的!带你体验TTS语音合成模块,B719语音合成模块效果测试...
- git命令行完全解读
- OKR 和 KPI 的适用场景
- 美国远程医疗公司First Stop Health获210万天使投资
- centOS6.7 /etc/profile
- java.util.concurrent介绍
- UNPIVOT的详细说明
- cisco路由器基本实验之一 静态路由的配置(Boson NetSim