rt-thread 线程的同步:线程同步是指多个线程通过特定的机制(如互斥量,事件对象,临界区)来控制线程之间的执行顺序

1.事件集:(可以实现一对多,多对多的同步)
   RT-Thread 定义的事件集有以下特点:
   1)事件只与线程相关,事件间相互独立:每个线程可拥有 32 个事件标志,采用一个 32 bit 无符号整型数进行记录,每一个 bit 代表一个事件;
   2)事件仅用于同步,不提供数据传输功能;
   3)事件无排队性,即多次向线程发送同一事件 (如果线程还未来得及读走),其效果等同于只发送一次。

 

一、事件控制块:在rtdef.h

 #ifdef RT_USING_EVENT/*事件的选项:逻辑或,逻辑与,清楚标志*/

 #define RT_EVENT_FLAG_AND 0x01 /**< logic and *#define RT_EVENT_FLAG_OR 0x02 /**< logic or */

#define RT_EVENT_FLAG_CLEAR             0x04            /**< clear flag */

/*事件结构体*/
struct rt_event
{
struct rt_ipc_object parent; /**< inherit from ipc_object */ //从IPC对象派生
rt_uint32_t set; /**< event set */ //保存接收到的事件集
};
typedef struct rt_event *rt_event_t;
#endif 二、事件相关接口:在ipc.c中
1.创建事件:rt_sem_create(const char *name, rt_uint8_t flag); 2.删除事件:rt_sem_delete(rt_sem_t sem); 3.初始化事件:rt_sem_init(rt_event_t event, const char *name, rt_uint8_t flag); 4.脱离事件:rt_sem_detach(rt_sem_t sem); 5.发送事件:rt_err_t rt_event_send(rt_event_t event, rt_uint32_t set); 6.接收事件:rt_err_t rt_event_recv(rt_event_t event,rt_uint32_t set,rt_uint8_t option,rt_int32_t timeout,rt_uint32_t *recved); 7.控制事件:rt_err_t rt_event_control(rt_event_t event, rt_uint8_t cmd, void *arg);
 

RT-thread内核对象--事件集的更多相关文章

  1. 异步设备IO OVERLAPPED结构(设备内核对象 事件内核对象 可提醒IO)

    同步IO是指:线程在发起IO请求后会被挂起,IO完成后继续执行. 异步IO是指:线程发起IO请求后并不会挂起而是继续执行.IO完毕后会得到设备驱动程序的通知. 一.异步准备与OVERLAPPED结构 ...

  2. windows核心编程---第八章 使用内核对象进行线程同步

    使用内核对象进行线程同步. 前面我们介绍了用户模式下线程同步的几种方式.在用户模式下进行线程同步的最大好处就是速度非常快.因此当需要使用线程同步时用户模式下的线程同步是首选. 但是用户模式下的线程同步 ...

  3. 《Windows核心编程系列》八谈谈用内核对象进行线程同步

    使用内核对象进行线程同步. 前面我们介绍了用户模式下线程同步的几种方式.在用户模式下进行线程同步的最大好处就是速度非常快.因此当需要使用线程同步时用户模式下的线程同步是首选. 但是用户模式下的线程同步 ...

  4. c++事件内核对象(event)进程间激活(转)

    源出处:http://blog.csdn.net/richerg85/article/details/7538493 此文主要说明的是,c++中创建的一个事件内核对象可以在不同的程序(进程)间共用,也 ...

  5. 第9章 用内核对象进行线程同步(1)_事件对象(Event)

    9.1 等待函数 (1)WaitForSingleObject(hObject,dwMilliseonds); ①dwMilliseconds为INFINITE时表示无限等待 ②dwMilliseco ...

  6. RT-thread内核对象标志flag总结

    一.内核标志flag 在内核对象控制块中有一个标志成员flag(rt_uint8_t flag; ),这个标志在不同有内核对象中具有不同的含义.rt-thread的内核对象有定时器.线程.信号量.互斥 ...

  7. 内核对象 windows操作系统

    问题: 什么是内核对象? 答:内核对象实际上时由内核分配的一块内存,而且只能由内核来访问.它时一个数据结构,成员包含有关于该对象的信息.一些成员对于所有对象类型都是一样的,比如对象名称.安全描述.使用 ...

  8. win32进程概念之句柄表,以及内核对象.

    句柄表跟内核对象 一丶什么是句柄表什么是内核对象. 1.句柄表的生成 我们知道.我们使用CreateProcess 的时候会返回一个进程句柄.以及线程句柄. 其实在调用CreateProcess的时候 ...

  9. [4]Windows内核情景分析---内核对象

    写过Windows应用程序的朋友都常常听说"内核对象"."句柄"等术语却无从得知他们的内核实现到底是怎样的, 本篇文章就揭开这些技术的神秘面纱. 常见的内核对象 ...

随机推荐

  1. HTTPS 基本流程 转载 https://zhuanlan.zhihu.com/p/27395037

    协议 1.HTTP 协议(HyperText Transfer Protocol,超文本传输协议):是客户端浏览器或其他程序与Web服务器之间的应用层通信协议 . 2.HTTPS 协议(HyperTe ...

  2. shiro初识

    shiro 可以做认证.授权.加密.会话管理.与web集成.缓存. 在本文中,主要使用认证和授权这两个功能. 在shiro框架中,有些很重要的概念: Subject    很多人把它理解为当前用户,这 ...

  3. 关于Apache做负载均衡

    Tomcat+apache配置负载均衡系统笔记 在Apache   conf目录下的httpd.conf文件添加以下文字 #---------------------start------------ ...

  4. jquery中添加元素append,prepend,before和after方法的区别

    append:在元素内部的最后面添加元素,作为子元素. prepend:在元素内部的最前面添加元素,作为子元素. before:在元素的前边,作为兄弟元素添加. after:在元素的后边,作为兄弟元素 ...

  5. 在Maven中新增自定的jar包

    引言: 在软件项目中,Maven提供了一体化的类库管理系统,非常实用.但是,如果新增的类库jar在网络上无法获取到,如何在本地按照Maven的规则添加进来呢?本文将通过一个小例子展示新增过程. 背景介 ...

  6. CSS 图像高级 Css Sprites

    上节课中我们学习了背景图像,这节课我们学习背景图像的高级知识,如Css Sprites,CSS 背景渐变等. Css Sprites Css Sprites,国内也叫CSS精灵.它的原理是将许多的小图 ...

  7. 关于第一个launcher开发笔记

    本笔记主要记录阅读关于launcher代码是的相关知识点. viewpager的简单使用(适配器模式):https://www.cnblogs.com/fuly550871915/p/4922953. ...

  8. 实现CNN卷积神经网络

    以上是模型,下面是代码: import tensorflow as tf import numpy as np import time from tensorflow.examples.tutoria ...

  9. docker学习-lnmp+redis之搭建mysql容器服务

    一. 前期准备工作,创建配置文件目录,log文件目录,数据库DATA和WEB站点目录[root@T1 ~]# mkdir -p /lnmp/conf/{mysql,nginx,php} /lnmp/l ...

  10. SecureCRT连接开发板 串口传输、tftp传输

    1.串口传输 使用命令:rx  r是service, x是X-model模式 ①.rx 文件名 再按Enter键 ②.将需要传到板子上的文件 拖到SecureCRT里面,选择发送X-model选项 注 ...