电子文档交易市场
安卓APP | ios版本
电子文档交易市场
安卓APP | ios版本

线程同步和互斥

11页
  • 卖家[上传人]:汽***
  • 文档编号:473915373
  • 上传时间:2023-05-22
  • 文档格式:DOCX
  • 文档大小:142.07KB
  • / 11 举报 版权申诉 马上下载
  • 文本预览
  • 下载提示
  • 常见问题
    • 1、课程设计题目:线程同步和互斥操作的实现课题背景:线程(Thread)是一份独立运行的程序,有自己专用的运行栈。线程有可能和其他线程 共享一些资源,比如,内存,文件,数据库等。 当多个线程同时读写同一份共享资源的时 候,可能会引起冲突。如车站售票系统,多个售票员同时对车票数据库进行操作,卖出一张 票车票数将减一,如果同时两个或多个售票员同时进行售票,系统将数据进行减一操作,这 是就出现了错误。这时候,我们需要引入线程同步和互斥机制,即各位线程之间要有个先来 后到,不能一窝蜂挤上去抢作一团。设计目的:设计程序解决进程的同步互斥,分析程序思路,加深对同步互斥的了解。设计方法与内容:使用信号两与pv操作源于来实现线程的同步与互斥,设计程序对商品的生产与销售流程 进行模拟。1 / 11线程同步和互斥操作的实现摘要 用 PV 操作及信号量解决线程同步互斥问题关键词 线程 同步 互斥 信号量 PV 操作 商品生产销售引言线程间的同步(实指线程间的通信):一般来说,一个线程相对于另一个线程的运行速 度是不确定的,也就是说线程是在异步环境下运行的,每个线程都会以不可预知的速度向前 推进。但是相互合作的线

      2、程需要在某些确定点上协调工作,当一个线程到达了这些点后,除 非另一进程已经完成了某些操作,否则就不得不停下来等待别的线程来完成这些操作,这就 是线程间的同步。线程间的互斥(实指对同享资源约束访问):在多线程环境中,各线程可以共享各类资 源,但有些资源一次只能允许一个线程使用,这种资源称“临界资源”,如公共变量、打印 机等。临界区:对临界资源实施操作的一段程序。线程间的同步与互斥是通过操作系统的信号量与PV操作原语来实现的。信号量与 PV 操作分析信号量是最早出现的用来解决进程同步与互斥问题的机制(也可实现进程通信),包括一 个称为信号量的变量及对它进行的两个原语操作P、V。p操作和v操作是不可中断的程序段, 称为原语。PV操作由P操作原语和V操作原语组成(原语是不可中断的过程),对信号量进行操作,具体定义如下:P (m):将信号量m的值减1,即m=m-1;如果m=0,则该进程继续执行;否则该进程置为等待状态,排入等待队列。V (m):将信号量m的值加1,即m=m+1;如果m0,则该进程继续执行;否则释放队列中第一个等待信号量的进程。PV操作的意义:我们用信号量及PV操作来实现进程的同步

      3、和互斥。PV操作属于进程 的低级通信。信号量的数据结构为一个值和一个指针,指针指向等待该信号量的下一个进程。信号量2 / 11的值与相应资源的使用情况有关。当它的值大于 0时,表示当前可用资源的数量;当它的值小于0时,其绝对值表示等待使用该资源的进程个数。注意,信号量的值仅能由PV操作来 改变。一般来说,信号量m=0时,m表示可用资源的数量。执行一次P操作意味着请求分配 一个单位资源,因此m的值减1;当 m0 时,表示已经没有可用资源,请求者必须等待别的进程释放该类资源,它才能 运行下去。而执行一个V操作意味着释放一个单位资源,因此m的值加1;若m=0,表示有某些进程正在等待该资源,因此要唤醒一个等待状态的进程,使之运 行下去。信号量和PV操作模型进程 P1进程 P2进程 PnP(S);P(S);P(S);临界区;临界区; 临界区V(S);V(S);V(S);其中信号量S用于互斥,初值为1。Synchronized 用法1、 pv 操作是不可中断的,在 java 语言中设计一个函数不可中断可使用 Synchronized 关键字,它的作用如下:1)是某个对象实例内,synchroniz

      4、ed aMethod()可以防止多个线程同时访问这个对象的 synchronized 方法(如果一个对象有多个 synchronized 方法,只要一个线程访问了其中的一 个 synchronized 方法,其它线程不能同时访问这个对象中任何一个 synchronized 方法)。这 时,不同的对象实例的synchronized方法是不相干扰的。也就是说,其它线程照样可以同时 访问相同类的另一个对象实例中的synchronized方法;2)是某个类的范围,synchronized static aStaticMethod防止多个线程同时访问这个类中 的 synchronized static 方法。它可以对类的所有对象实例起作用。2、 除了方法前用 synchronized 关键字, synchronized 关键字还可以用于方法中的某个3 / 11区块中,表示只对这个区块的资源实行互斥访问。用法是:synchronized(this)/呕块*/,它 的作用域是当前对象;3、synchronized关键字是不能继承的,也就是说,基类的方法synchronized f()在继承 类中并不

      5、自动是synchronized f(),而是变成了 f()。继承类需要你显式的指定它的某个方 法为 synchronized 方法;注意问题使用 PV 操作实现进程互斥时应该注意的是:(1)每个程序中用户实现互斥的P、V操作必须成对出现,先做P操作,进临界区, 后做 V 操作,出临界区。若有多个分支,要认真检查其成对性。(2)P、 V 操作应分别紧靠临界区的头尾部,临界区的代码应尽可能短,不能有死循环。(3)互斥信号量的初值一般为 1。使用PV操作实现进程同步时应该注意的是:(1)分析进程间的制约关系,确定信号量种类。在保持进程间有正确的同步关系情况 下,哪个进程先执行,哪些进程后执行,彼此间通过什么资源(信号量)进行协调,从而明 确要设置哪些信号量。(2)信号量的初值与相应资源的数量有关,也与 P、 V 操作在程序代码中出现的位置 有关。(3)同一信号量的P、V操作要成对出现,但它们分别在不同的进程代码中。本程序模拟商品的生产与销售,生产者 producer 生产商品后添加到库存 stock ,销售 员 seller 从库存中取商品进行销售。生产者:p(Empty); p(Mutex

      6、); stocks+;临界区v(Mutex);v(Full); sleep(n);销售者:p(Full); p(Mutex); stocks-;临界区 v(Mutex); v(Empty);sleep(n);详细代码实现:销售线程class SellerThread extends Thread private String sellerName;public SellerThread(String sName) super(); sellerName = sName;public void run() while (!interrupted() try PS.Full.p();PS.Mutex.p();PS.stocks-;PS.stockJLabel.setText(String.valueOf(PS.stocks);PS.showjProgressBar1.setValue(int) (100 * (double) (PS.stocks) / PS.stockNum);PS.outjTextArea1.setText (PS.outjTextArea1.getText() + r

      7、n + ThreadName: + sellerName + tGlobal value: + PS.stocks);PS.Mutex.v();PS.Empty.v();sleep(long) (10000) * Math.random(); catch (InterruptedException ex) break;生产线程class ProducerThread extends Thread private String producerName;public ProducerThread(String sName) super();producerName = sName;public void run() while (!interrupted() try PS.Empty.p();PS.Mutex.p();PS.stocks+;PS.stockJLabel.setText(String.valueOf(PS.stocks);PS.showjProgressBar1.setValue(int) (100 * (double) (PS.stocks) / PS.stockNum)

      8、;PS.outjTextArea1.setText(PS.outjTextArea1.getPxt() + rn + ThreadName: + producerName + tGlobal value: + PS.stocks);PS.Mutex.v();PS.Full.v();sleep(long) (10000) * Math.random(); catch (InterruptedException ex) break;/ while信号量类class semaphore private int mutex;semaphore(int m) mutex = m;/信号量构造函数设置信号量的初始数据public final synchronized void p() throws InterruptedException mutex-;if (mutex 0) wait();public final synchronized void v() 主线程class mainThread extends Thread public mainThread() super();public

      9、 void run() for (int i = 0; i PS.producerNum; i+) new ProducerThread(Producer_ + (i+1).start(); sleep(long) (1000) * Math.random();for (int i = 0; i PS.sellerNum; i+) new SellerThread(Sellser_ + (i+1).start(); sleep(long) (1000) * Math.random();界面public class PS extends javax.swin g.JF rame 界面成员对象声明略static int sellerNum = 5;常量设置销售进程数目static int producerNum = 5;常量设置生产进程数目static int stockNum = 10;static int stocks = 0;static semaphore Full = new semaphored);static semaphore Empty = new semaphore(stockNum);static

      《线程同步和互斥》由会员汽***分享,可在线阅读,更多相关《线程同步和互斥》请在金锄头文库上搜索。

      点击阅读更多内容
    最新标签
    监控施工 信息化课堂中的合作学习结业作业七年级语文 发车时刻表 长途客运 入党志愿书填写模板精品 庆祝建党101周年多体裁诗歌朗诵素材汇编10篇唯一微庆祝 智能家居系统本科论文 心得感悟 雁楠中学 20230513224122 2022 公安主题党日 部编版四年级第三单元综合性学习课件 机关事务中心2022年全面依法治区工作总结及来年工作安排 入党积极分子自我推荐 世界水日ppt 关于构建更高水平的全民健身公共服务体系的意见 空气单元分析 哈里德课件 2022年乡村振兴驻村工作计划 空气教材分析 五年级下册科学教材分析 退役军人事务局季度工作总结 集装箱房合同 2021年财务报表 2022年继续教育公需课 2022年公需课 2022年日历每月一张 名词性从句在写作中的应用 局域网技术与局域网组建 施工网格 薪资体系 运维实施方案 硫酸安全技术 柔韧训练 既有居住建筑节能改造技术规程 建筑工地疫情防控 大型工程技术风险 磷酸二氢钾 2022年小学三年级语文下册教学总结例文 少儿美术-小花 2022年环保倡议书模板六篇 2022年监理辞职报告精选 2022年畅想未来记叙文精品 企业信息化建设与管理课程实验指导书范本 草房子读后感-第1篇 小数乘整数教学PPT课件人教版五年级数学上册 2022年教师个人工作计划范本-工作计划 国学小名士经典诵读电视大赛观后感诵读经典传承美德 医疗质量管理制度 2
    关于金锄头网 - 版权申诉 - 免责声明 - 诚邀英才 - 联系我们
    手机版 | 川公网安备 51140202000112号 | 经营许可证(蜀ICP备13022795号)
    ©2008-2016 by Sichuan Goldhoe Inc. All Rights Reserved.