2017年,回望过去,前半年还致力于iOS开发,后半年就开始了python的漫漫之路,一路上走走停停,不过还好,总的来说,2017是收获的一年,也是付出的一年.2018加油! 话题转回来,关于线程执行的时候,大家可能会遇到一个问题,一个请求需要上一个请求的返回的数据作为参数,可是呢,你又想走异步操作,这时候问题就来了,还没有拿到上一个请求返回的参数,下一个请求已经开始操作了,就我而言的话,我会用三种方式进行:1.block回调,block的话直接block作为参数也可以实现  2. dispat…
思考:现在有多个线程异步执行,我们想要同时最多只能执行2个或n个,该怎么办? dispatch_semaphore_t 看代码解析: NSLog(@"开始"); dispatch_semaphore_t t = dispatch_semaphore_create();//设置信号量初始值 dispatch_async(dispatch_queue_create("one", DISPATCH_QUEUE_CONCURRENT), ^{ dispatch_semaph…
以下基础内容转载自安富莱电子: http://forum.armfly.com/forum.php 本章节为大家讲解 FreeRTOS 计数信号量的另一种实现方式----基于任务通知(Task Notifications)的计数信号量,这里我们将这种方式实现的计数信号量称之为任务计数信号量. 任务计数信号量效率更高,需要的 RAM 空间更小.当然,缺点也是有的,它没有之前介绍的计数信号量实现的功能全面. 任务通知(Task Notifications)介绍FreeRTOS 每个已经创建的任务都有…
一.简介: dispatch_semaphore_t:表示信号,生成信号的方法是 dispatch_semaphore_t semaphore= dispatch_semaphore_create(0); 其中参数0表示该新生成信号的总的信号量为0个. dispatch_semaphore_wait:信号等待,它像一个安保,比如小区规定最多只能进入3辆车,而进入一辆车后名额就会减少一个,当剩下的名额为0的时候,再有汽车说要进去时,就只能在外面等待了,直到有名额闲置出来了,才能开进小区. disp…
线程锁是什么 在前面的文章中总结过多线程,总结了多线程之后,线程锁也是必须要好好总结的东西,这篇文章构思的时候可能写的东西得许多,只能挤时间一点点的慢慢的总结了,知道了线程之后要了解线程锁就得先了解一下什么是“线程锁”. “线程锁”一段代码在同一个时间内是只能被一个线程访问的,为了避免在同一时间内有多个线程访问同一段代码就有了“锁”的概念,比如说,线程A在访问着一段代码,进入这段代码之后我们加了一个“锁”.这个时候线程B又来访问了,由于有了锁线程B就会等待线程A访问结束之后解开了“锁”线程B就可…
概述 我们在使用多线程的时候多个线程可能会访问同一块资源,这样就很容易引发数据错乱和数据安全等问题,这时候就需要我们保证每次只有一个线程访问这一块资源,锁 应运而生. iOS中锁之前的性能的图标排行: 开发中常接触的就是NSLock与@synchronized,其它的后续在研究. NSLock NSLock是Foundation提供的类,NSLock的API很少也很简单.常用的就几个方法 - (void)lock; - (void)unlock; - (BOOL)tryLock; - (BOOL…
简介 在实际应用中,任务常常需要与多个事件同步,即要根据多个信号量组合作用的结果来决定任务的运行方式.μC/OS-II 为了实现多个信号量组合的功能定义了一种特殊的数据结构--信号量集. 信号量集所能管理的信号量都是一些二值信号,所有信号量集实质上是一种可以对多个输入的逻辑信号进行基本逻辑运算的组合逻辑,其示意图如下图所示: 信号量集的标志组 不同于信号量.消息邮箱.消息队列等事件,μC/OS-II 不使用事件控制块来描述信号量集,而使用了一个叫做标志组的结构 OS_FLAG_GRP. OS_F…
事件标志组 1.当任务要与多个事件同步时可以使用事件标志.若其中的任意一个事件发生时任务被就绪, 叫做逻辑或(OR).若所有的事件都发生时任务被就绪,叫做逻辑与( AND). 2.用户可以创建任意个事件标志组( 限制于RAM). uC/OS-III中与事件标志组相关的函数都是以 OSFlag???()为前缀.与事件标志组相关的函数代码都在OS_FLAG.C中. 3.设置OS_CFG.H中的OS_CFG_FLAG_EN为1开启事件标志组功能. ( 1)事件标志组是uC/OS-III的内核对象,以O…
在Linux中.信号量API有两组.一组是多进程编程中的System V IPC信号量.另外一组是我们要讨论的POSIX信号量. 这两组接口类似,但不保证互换.POSIX信号量函数都已sem_开头,并不像大多数线程函数那样以pthread_开头.经常使用的有下面5个: #include <semaphore.h> int sem_init(sem_t* sem, int pshared, unsigned int value); int sem_destroy(sem_t *sem); int…
硬件信号量在多核处理器核间通信中的应用 刘德保1,汪安民1,韩道文2 1.同方电子科技有限公司研究所,九江 332009:2.解放军电子工程学院 摘要: 在多核处理器的软件设计中,核间通信机制是关键所在,有效合理的核间通信可以发挥多核处理器的并行处理能力.中断和查询方式是传统的核间通信手段,但存在丢失中断和查询效率低的缺点.为解决这一问题,多核处理器提供了一种全新的硬件信号量机制,用于核间通信.本文以多核DSP芯片TMS320C6678为例,描述了硬件信号量的工作原理和方法以及模块的结构和配置,…
在iOS多线程中我们知道NSOperationQueue操作队列可以直接使用addDependency函数设置操作之间的依赖关系实现线程同步,还可以使用setMaxConcurrentOperationCount函数直接设置最大并发数量.那么在GCD中又是如何实现线程同步和控制最大并发数量的呢? 事实上在之前的问题中我们已经提到了GCD实现线程同步的两种方法了,一种是组队列(dispatch_group_t),另一种是dispatch_barrier_(a)sync,都是等待前面的任务完成后再执…
一.μCos-ii _概述 网上关于μCosii的文章多不胜数,本人学习的过程中也参考了很多人的理解和想法,看的是卢有亮老师的<嵌入式实时操作系统-μC/OS原理与实践>(第2版),同时也参考了邵贝贝老师的<嵌入式实时操作系统μCOS-II>,断断续续一个月看了几遍书,也在stm32上简单移植了μCos-ii,这里也谈下自己的理解,如有纰漏,敬请指教. 1.什么是操作系统,为什么要学操作系统? 生活中PC上最常见的无非Windows.Mac OS.Linux等操作系统,移动设备上的…
Markdown版本笔记 我的GitHub首页 我的博客 我的微信 我的邮箱 MyAndroidBlogs baiqiantao baiqiantao bqt20094 baiqiantao@sina.com 目录 目录MMKV基本使用支持的数据类型SharedPreferences 迁移MMKV 组件现在开源了MMKV 源起MMKV 原理MMKV for Android 特有功能MMKV 使用Android 快速上手SharedPreferences 迁移MMKV 性能iOS 性能对比Andr…
郑重声明,版权所有! 转载需说明. FREERTOS堆栈大小的单位是word,不是byte. 根据处理器架构优化系统的任务优先级不能超过32,If the architecture optimized method is used then configMAX_PRIORITIES cannot be greater than 32. vTaskDelay() delay from call the vTaskDelay vTaskDelayUntil delay from last wake…
在NSURLSessionTask发起网路请求时,一般是异步操作,如果需要进行同步等待的话,可采用dispatch_semaphore_t信号量基于计数器的一种多线程同步机制.但是在多个线程访问共有资源时候,会因为多线程的特性而引发数据出错的问题,需要慎重使用. 关于dispatch_semaphore_wait(semaphore, DISPATCH_TIME_FOREVER); 如果semaphore计数大于等于1,计数减一,返回,程序继续运行.如果计数为0,则等待.这里设置的等待时间是一直…
在μC/OS-Ⅲ系统中任务挂起表与任务就续表十分相似,只不过任务就续表记录就绪状态的任务,任务挂起表记录等待某个内核对象的任务.任务挂起表是一个类型为OS_PEND_LIST的数据结构,包含三个成员:1.NbrEntries,等待表中表项数目:2.TailPtr,指向等待表中最后一个任务(优先级最低的任务):3.HeadPtr,指向等待表中第一个任务(优先级最高的任务). 任务挂起表并不直接指向任务的控制块OS_TCB,而是指向一个OS_PEND_DATA类型的中间变量.该类型变量在任务被放入任…
多值信号量和和互斥信号量主要用来标志事件是否发生和协调资源的访问.如果要给资源赋予内容进行传递, 信号量就力有所不及了.这时候就需要用到 uC/OS 操作系统的另一个内核机制了,那就是消息队列. 2.原理 如果想要使用消息队列,就必须事先使能消息队列. 消息队列的使能位于“os_cfg.h”. 消息队列的消息都是从消息池获取的. 消息队列可以有一个或多个,但消息池却只有一个. 当有消息队列要发布消息时, 就从消息池(OS_MSG 类型数组的元素依次组成的单向列表)获取一个元素用于存放消息,并将该…
同步 uC/OS-III中用于同步的两种机制:信号量和事件标志组 . 1.信号量 信号量最初用于控制共享资源的访问.信号量可用于ISR与任务间.任务与任务间的同步. “ N”表示信号量可以被累计.初始化时也可以设置为非0值,表明已经有事件发生.ISR或任务可以提交信号量多次,信号量计数值会记录该信号量一共可被多少次. 注意的是所有的信号量函数都可以被任务调用, 但是ISR中只能调用OSSemPost(). 函数名 功能 OSSemCreate() 创建一个信号量 OSSemDel() 删除一个信…
在上一篇我们介绍了FreeRTOS任务的一些基本操作和功能,今天我们会介绍一个很好很强大的功能——任务通知 任务通知可以在不同任务之间传递信息,它可以取代二值信号量.计数信号量.事件标志组.深度为1的消息队列等功能,因为它更快,占用RAM更少,是FreeRTOS自8.2以来推出的重大改进功能. 一.任务通知相关变量 1.1.TCB中的通知相关成员 FreeRTOS每个任务都有一个通知指示值,和一个32位通知值: 任务数据结构(TCB)中与队列通知相关的成员 #if ( configUSE_TAS…
任务控制块 TCB 1.任务控制块是被uC/OS-III用于维护任务的一个结构体.每个任务都必须有自己的 TCB. uC/OS-III 在 RAM 中分配 TCB.当调用uC/OS-III提供的与任务相关的函数(以OSTask???()形式命名)时,任务的TCB地址需会被提供给该函数. TCB的结构定义于OS.H中,如列表 5-3所示(在 OS.H中代码是有注释的). TCB中的一些变量可以根据具体应用进行裁剪. 2.用户程序不应该访问这些变量(尤其不能更改它们).换句话说,TCB中的变量只能被…
1.C/OS-III是一个可扩展的, 可固化的, 抢占式的实时内核, 它管理的任务个数不受限制. 它是第三代内核, 提供了现代实时内核所期望的所有功能包括资源管理.同步.内部任务交流等. uC/OS-III也提供了很多特性是在其他实时内核中所没有的.比如能在运行时测量运行性能, 直接得发送信号或消息给任务, 任务能同时等待多个信号量和消息队列. 2.特点 (1).源代码: uC/OS-III完全根据 ANSI-C标准写的. (2).用程序接口( API): uC/OS-III是很直观的. (3)…
启动工作原理 刚接触操作系统的时候觉得这个最神秘,到底里面做了什么,怎么就成了个操作系统,它到底有什么用,为什么要引进来着个东东.学了之后才知道,原来最根本的思想还是源于汇编里面的跳转和压栈,以调用一个函数为例,编译后的汇编肯定是先通过SP压入当前代码段地址然后就是保存一些寄存器的值放栈里面(51单片机好像不是这样),然后执行程序,完了之后,出栈把寄存器恢复,最后把原来存的代码段地址付给PC然后回到原来的程序,这是汇编执行函数的做法,而操作系统人为强行的模拟这样操作,把代码写成不同代码块假定为A…
我造轮子,你造车,创客一起造起来!塔克创新资讯[塔克社区 www.xtark.cn ][塔克博客 www.cnblogs.com/xtark/ ] 概述 前后台系统 简单的小型系统设计一般是基于前后台的或者无限循环的系统.包含一个无限循环的模块实现需要的操作(后台).中断处理程序实现异步事件(前台).前台也叫做中断级,后台也叫作任务级.临界操作应该在任务级中被执行,不可避免地必须在中断处理程序中执行也要确保是在很短的时间内完成.因为这会导致ISR 占用更长的时间.通常的,ISR 中使能相关的信息…
以下转载自安富莱电子: http://forum.armfly.com/forum.php 本章节为大家讲解 FreeRTOS 动态内存管理,动态内存管理是 FreeRTOS 非常重要的一项功能,前面章节讲解的任务创建. 信号量. 消息队列. 事件标志组. 互斥信号量. 软件定时器组等需要的 RAM 空间都是通过动态内存管理从 FreeRTOSConfig.h 文件定义的 heap 空间中申请的. 动态内存管理介绍FreeRTOS 支持 5 种动态内存管理方案,分别通过文件 heap_1,hea…
说一下刚学习uCOS的心得1)首先强调一下实时操作系统(RTOS)的特点,最明显的是提供及时响应和高可靠性2)基于实施操作系统的应用程序设计中,其中很重要的一个概念是"任务",任务设计也就是任务函数的设计是整个整 个应用程序的基础,其他软件设计工作都是围绕来展开的3)用户任务函数中,必须包含至少一次的系统服务函数(一般是等待类的函数以便其他函数有机会得以运行),否则优 先级更低的任务将无法得到运行的机会,中断服务程序不能调用该类函数即一些等待函数,防止中断服务程序被打断4)任务函数分为…
以下转载自安富莱电子: http://forum.armfly.com/forum.php 本章节为大家讲解 FreeRTOS 的配置文件 FreeRTOSConfig.h 中每个选项的作用.初学的话,一定要有个了解,随着以后的学习一定要熟练操作每个配置选项. 基本配置: configUSE_PREEMPTION 配置为 1使能抢占式调度器. 配置为 0 使能合作式调度器. configUSE_PORT_OPTIMISED_TASK_SELECTION 此配置用于优化优先级列表中要执行的最高…
1. 概述 Semaphore(信号)  并不存在真正的许可 只是维护一个计数器, 通常用来限定进入一些资源的线程数 accquire()  方法获取许可 成功则计数器值-1 没有则阻塞直到一个可用的许可(即计数器>0) release() 方法 潜在的释放了申请人(通过给计数器值+1) 2. 示例一(单独测试信号量增减  availabelPermits对超出数量的线程的阻塞) package com.rocky.semaphore; import java.util.concurrent.E…
前言 参考来源:<java并发编程实战> 同步工具类:根据工具类的自身状态来协调线程的控制流.通过同步工具类,来协调线程之间的行为. 可见性:在多线程环境下,当某个属性被其他线程修改后,其他线程能够立刻看到修改后的信息.典型的是用java内置关键字volatile,volatile变量可以让jvm知道这个变量是对所有线程共享的,jvm会做一定的同步工作,但不保证原子性. 这一部分内容可以看一下http://www.cnblogs.com/dolphin0520/p/3920373.html h…
一.UCOS-III 学习UCOS-III,一般会学习以下内容: 任务创建.删除.挂起.恢复等: 临界区:独占CPU,尽量少用,否则会降低效率: 时间管理:时钟节拍(基于硬件定时器).软件定时器: 互斥量:线程的互斥,某一资源同时只允许一个访问者访问,一个互斥量对应一个资源: 信号量:在互斥量的基础上,实现访问者有序访问,单值/多值信号量对应一个/多个资源: 消息队列:能够传输较多的信息,以消息缓冲区为中间介质,相比较命名管道的以文件为介质(读写文件)灵活很多: 内核对象:系统级对象,只能通过系…
主要特点:协程(co-routine):任务间的中断通信机制              支持可抢占式/协作式任务调度 .FreeRTOS-MPU              内核对象可以动态或静态分配 . 所有任务间的通信与同步机制都是基于队列实现的(从堆分配实现) : OpenRTOS是FreeRTOS的商业版本 SAFERTOS: 安全认证版的FreeRTOS 任务管理:任务的创建.删除.挂起.恢复,查询/设定任务的优先级,任务的延时 队列管理:包括队列的创建,发送到队列头/尾,从队列中接收,…