资源同步

以前在学单片机的时候,在中断那一节,在处理中断服务程序时,总是要在程序开头加上一句关中断,处理完以后然后开中断,当时迷迷糊糊的也不知道是干什么用,老师也不给你详细讲,因为他详细讲了估计你也听不懂,这几天看操作系统以及多任务处理时,对这一块又有了新的认识。

被两个或者两个并发程序单元访问的资源称为共享资源,共享资源一定是全局资源,但全局资源不一定是共享资源。当多个任务同时访问同一共享资源时,不免会发生资源争夺现象。所以只有保证各个任务访问共享资源互斥,才能保障共享资源的可靠性和完整性。“资源同步”有关中断,关调度,使用互斥信号量和使用计数信号量。举个例子吧,假设有任务A,B优先级依次递减,假如某一个时刻,A被挂起,B开始访问共享资源,并判断是不是最后一个达到同步点的任务,但是这时一个异步信号,激活了A,因为A的优先级高于B,也判断自己是不是最后一个达到同步点的任务,便进行“签到”,并加入任务队列挂起。这时完成判断的B重新获得运行机会,进入任务队列挂起,整个任务便进入瘫痪状态。所以这时如果在B之前加入关中断,就不会被A打扰。

     

时间: 2024-07-30 10:19:20

资源同步的相关文章

线程的资源同步问题

卖出的票为负数的情况: class MyThread22 implements Runnable {     private int ticket = 10;     public void run() {         for (int i = 0; i < 100; i++) {             if (ticket > 0) {                 try {                    Thread.sleep(1000);               

多线程下的资源同步访问

在一个应用程序中使用多线程 好处是每一个线程异步地执行. 对于Winform程序,可以在后台执行耗时操作的同时,保持前台UI正常地响应用户操作. 对于Service.对于客户端的每一个请求,可以使用一个单独的线程来进行处理.而不是等到前一个用户的请求被完全处理完毕后,才能接着处理下一个用户的请求. 同时,异步带来的问题是,必须协调对资源(文件,网络,磁盘)的访问. 否则,会造成在同一时间两个以上的线程访问同一资源,并且这些线程间相互未知,导致不可预测的数据问题. Lock/Monitor:防止线

好记性不如烂笔头76-多线程-通过synchronized实现资源同步

每个对象都有一个标志锁.当对象的一个线程访问了对象的某个synchronized数据(包括函数)时,这个对象就将被"上锁",被声明为synchronized的数据(包括函数)都不能被调用(因为当前线程取走了对象的"锁标志"). 只有当前线程访问完它要访问的synchronized数据,释放"锁标志"后,同一个对象的其它线程才能访问synchronized数据. 注意:每个class也有一个"锁标志".对于synchronize

多线程 共享资源 同步锁 java

synchronized是java中的一个关键字,也就是说是Java语言内置的特性.那么为什么会出现Lock呢? 如果一个代码块被synchronized修饰了,当一个线程获取了对应的锁,并执行该代码块时,其他线程便只能一直等待,等待获取锁的线程释放锁,而这里获取锁的线程释放锁会有三种情况: 1)获取锁的线程执行完了该代码块,然后线程释放对锁的占有: 2)线程执行发生异常,此时JVM会让线程自动释放锁. 3)这个主要是在等待唤醒机制里面的wait()方法,//在等待的时候立即释放锁,方便其他的线

gitbook 的资源同步到 github中(方便维护和备份)

进入SETTINGS -> Github -> Select a Repository. 到这一步为止,我们可以先去我们的github,创建一个仓库先,推荐同名.然后回来gitbook中,刷新界面.选择我们的仓库 如果出现如下错误是正常的. 我们点一下左边的Gitbook.表示以左边的为主进行同步.然后等待同步...成功后如图所示: 我们来查看一下我们的github仓库,发现已经同步成功了:

防止SVN冲突,Elipse资源同步介绍

灰色向右箭头: 本地修改了 灰色向右箭头且中间有白色减号: 本地删除了,服务器未删除 灰色向右且中间有个加号的箭头:本地比SVN上多出的文件 蓝色向左箭头:svn上修改过 蓝色向左且中间有个加号的箭头:SVN上比本地多出的文件 蓝色向左且中间有个减号的箭头:SVN上删除了,而本地未删除的文件 红色双向箭头:本地修改过,svn上也修改过

Service系统服务(六):rsync基本用法、rsync+SSH同步、配置rsync服务端、访问rsync共享资源、使用inotifywait工具、配置Web镜像同步、配置并验证Split分离解析

一.rsync基本用法 目标: 本例要求掌握远程同步的基本操作,使用rsync命令完成下列任务: 1> 将目录 /boot 同步到目录 /todir 下   2> 将目录 /boot 下的文档同步到目录 /todir 下   3> 在目录 /boot 下新增文件 a.txt,删除 /todir 下的子目录 grub2,再次同步使 /todir 与 /boot 一致   4> 验证 -a.-n.-v.--delete 选项的含义 方案: 本地同步操作: rsync [选项...] 本

多任务实时系统中的同步与通信

在多任务实时系统中,常常需要在任务之间或者中断与任务之间进行通信,这就产生了同步与通信机制. 同步可分为两种: ①资源同步:避免两个及以上任务对同一个资源的同时操作 ②活动同步:确定任务的活动是否到达一个确定状态 通信的目的主要是以下几点: ①让一个任务控制另一个任务 ②在任务间传递信息(通常为状态) ③传递数据 ④同步 通信的主要方式有: ①全局变量:容易引起混乱 ②共享内存:需要和某种同步机制配合使用 ③信号量.邮箱.消息队列.互斥体等消息机制 一. 信号量 信号量的通俗结束:一家餐馆有二十

Go语言之并发资源竞争

并发本身并不复杂,但是因为有了资源竞争的问题,就使得我们开发出好的并发程序变得复杂起来,因为会引起很多莫名其妙的问题. package main import (     "fmt"     "runtime"     "sync" ) var (     count int32     wg    sync.WaitGroup ) func main() {     wg.Add(2)     go incCount()     go incC