文章目录

  • 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 典型案例


参考资料:

  1. 手把手教你学用嵌入式操作系统

用信号量实现任务间单向同步相关推荐

  1. 铂金04:令行禁止-为何说信号量是线程间的同步利器

    欢迎来到<并发王者课>,本文是该系列文章中的第17篇. 在并发编程中,信号量是线程同步的重要工具.在本文中,我将带你认识信号量的概念.用法.种类以及Java中的信号量. 信号量(Semap ...

  2. VxWorks中信号量实现任务间通信与同步机制分析

    引 言 多任务内核.任务调度机制.任务间通信和中断处理机制,这些都是VxWorks运行环境的核心.多任务处理和任务间通信是实时操作系统的基石.一个多任务环境允许将一个实时应用构造成一套独立任务的集合, ...

  3. 线程间通信————同步

          同步 是指多个任务按照约定的先后次序 相互配合完成一件事情 信号量: 由信号量决定 线程是继续执行 还是阻塞等待 信号量代表某种资源 其值表示系统中该资源的数量 信号量是一个受保护的量 只 ...

  4. C++信号量实现线程间同步,windows使用SetEvent,linux使用sem_t,QT测试

    目录 windows使用CreateEvent.SetEvent.ResetEvent.WaitForSingleObject linux使用sem_init.sem_wait.sem_trywait ...

  5. 临界区、事件、互斥量、 信号量--四种控制多线程同步与互斥的方法

    // MultiThread.cpp : 定义控制台应用程序的入口点. //#include "stdafx.h"#include <Windows.h> #inclu ...

  6. 系统进程间的同步机制

    说出你所知道的各类linux系统的各类同步机制(重点),什么是死锁?如何避免死锁 linux系统的通讯机制,主要是指进程间通讯,其实通讯就是进程同步的手段.如果问进程间同步,见问题7,这里要说的lin ...

  7. java 进程同步代码_java 实现进程间的同步(源代码)

    操作系统课程设计:实现进程间的同步. 有问题留言 import java.util.concurrent.Semaphore; /******** 信号量 *******/ class Sign { ...

  8. java 信号量 互斥锁_线程同步(互斥锁与信号量的作用与区别)

    "信号量用在多线程多任务同步的,一个线程完成了某一个动作就通过信号量告诉别的线程,别的线程再进行某些动作(大家都在semtake的时候,就阻塞在 哪里).而互斥锁是用在多线程多任务互斥的,一 ...

  9. goldengate for mysql_GoldenGate for mysql to mysql:单向同步

    GoldenGate for mysql to mysql:单向同步 GoldenGate用于在各种企业系统间以亚秒级速度复制和集成事务数据,是同类最佳的.易于部署的产品.GoldenGate 可以灵 ...

最新文章

  1. java将0到9随机输出_生成0到9之间的随机整数
  2. c 语言cad 二次开发,c#对AutoCAD二次开发
  3. NOIP2016普及组复赛第一题的AC程序加题解pascal
  4. schema get_ddl
  5. leetcode 224. Basic Calculator | 224. 基本计算器(中缀表达式求值)
  6. 搜索2.0:利用用户点击记录改善搜索结果
  7. [SpringSecurity]HelloWorld入门案例
  8. LeetCode题库整理【Java】—— 1两数之和
  9. AI 对不起 我还爱着你
  10. 4k电视色彩表现测试软件,选高端4K电视 4K测试图帮你轻松分辨
  11. 标准库:turtle --- 海龟绘图
  12. Spring Security 实战:实现自定义退出登录
  13. html大风效果,使用jquery.windy制作风吹卡片的效果 | jQuery教程
  14. 通过LiveNVS(免费使用)集中化管理多个LiveNVR-数据透传摆脱局域网的公网IP限制
  15. 表单ajax提交插件,详解javascript表单的Ajax提交插件的使用
  16. C语言数据的输入与输出
  17. 厦门计算机中专学校,厦门十大中专学校
  18. 申宝证券-银行股午后集体异动拉升
  19. MiiX·阿希全球区块链黑客马拉松大赛 获奖选手专访
  20. 芦荟的种类和价值,你都了解吗?

热门文章

  1. 不越狱换壁纸_9 款优质、免费越狱插件
  2. linux下使用split 来分割大文件
  3. 【体验】朗读机器人是如何炼成的!带你体验TTS语音合成模块,B719语音合成模块效果测试...
  4. git命令行完全解读
  5. OKR 和 KPI 的适用场景
  6. 美国远程医疗公司First Stop Health获210万天使投资
  7. centOS6.7 /etc/profile
  8. java.util.concurrent介绍
  9. UNPIVOT的详细说明
  10. cisco路由器基本实验之一 静态路由的配置(Boson NetSim