软件构造 并发2

交织竞争条件
在某时刻一个运行核心只有一个线程可以运行。   进程/线程采用OS提供的时间片特征来共享处理时间。
当线程数多于处理器数量时,并发性通过时间片来模拟,处理器切换处理不同的线程。
例子:时间片(其使用是不可预知的,非确定性的,意味着线程可能随时暂停或恢复)
           三个线程T1 T2 T3可能在具有两个实际处理器的机器上进行时间分割,一个处理器运行线程T1,另一个运行线程T2,第二个处理器切换到运行线程T3.
                                                                                                                           线程T2只是暂停,直到下一个时间片在同一个处理器或另一个处理器上
          共享内存银行存储实例:在Java中,采用happened-before机制,保证了语句A内存的写 入对语句B是可见的,也就是在B开始读数据之前,A已经完成了数据 的写入。 确保内存一致性
                                                  每次运行包含竞争条件的程序时,都可能会得到不同 的行为。

打印 调试操作很慢,通常慢100-1000倍,所有有时打印出来的并不是想要的该时间段的结果

原文地址:https://www.cnblogs.com/xgl122/p/9195342.html

时间: 2024-11-01 09:22:52

软件构造 并发2的相关文章

软件构造 并发1

并发:多个运算同时发生.并发模型:共享内存 消息传递共享内存:并发模块通过在内存中读写共享对象进行交互 ①两个处理器共享物理内存②两个程序共享文件③两个线程(同一个java程序)共享对象 消息传递:并发模块通过通信通道相互发送消息进行交互.模块发送消息,并将传入的消息发送到每个模块以便处理 ①网络中两台计算机通信②web浏览器web server③即时消息的客户端和服务器④通过管道连接两个程序的输入和输出 进程 线程两种不同的并发模块进程:正在运行程序的一个实例,拥有自己私有专用的内存空间   

软件构造 并发3(线程安全性)

线程安全:数据类型或静态方法在多线程中执行时,无论如何执行,不需调用者做额外的协作仍可以得到正确的行为. 行为正确意味着满足规格说明和保持不变性   不能在前置条件中对调用者增加时间性要求(在set()运行时不能调用get()) 例子:迭代器, 不是线程安全的. 迭代器的规范说,不能在迭代它的同时修改一个集合. 这是一个与调用者相关的时间相关的前提条件,如果违反它,Iterator不保证行为正确 线程安全的四个方法:①限制可变变量的共享②用不可变的共享变量③将共享数据封装在线程安全的数据类型中④

软件构造 并发3(线程安全性)----锁定和同步

同步:防止线程同时访问共享数据. 锁:是一种抽象,最多允许一个线程拥有它. 保持锁定是一条线程告诉其他线程的:我正在改变这  个东西,现在不要触摸它 两个操作:获取允许线程获取锁的所有权. 如果一个线程试图获取当前由另一个线程拥有的锁,它将阻塞,直到另一个线程释放该锁. 此时,它将与任何其他尝试获取锁的线程竞争. 一次只能有一个线程拥有该锁.释放锁的所有权,允许另一个线程获得它的所有权 使用锁还会告知编译器和处理器您正在同时使用共享内存,以便将寄存器和高速缓存刷新到共享存储. 这可以确保锁的所有

麻省理工18年春软件构造课程阅读04“代码评审”

本文内容来自MIT_6.031_sp18: Software Construction课程的Readings部分,采用CC BY-SA 4.0协议. 由于我们学校(哈工大)大二软件构造课程的大部分素材取自此,也是推荐的阅读材料之一,于是打算做一些翻译工作,自己学习的同时也能帮到一些懒得看英文的朋友.另外,该课程的阅读资料中有许多练习题,但是没有标准答案,所给出的答案均为译者所写,有错误的地方还请指出. 译者:李秋豪 审校: V1.0 Thu Mar 8 22:58:41 CST 2018 本次课

软件构造期末复习考点总结

[考点 Equals] ==是引用等价性 :而equals()是对象等价性. == 比较的是索引.更准确的说,它测试的是指向相等(referential equality).如果两个索引指向同一块存储区域,那它们就是==的.对于我们之前提到过的快照图来说,==就意味着它们的箭头指向同一个对象. equals()操作比较的是对象的内容,换句话说,它测试的是对象值相等(object equality).e在每一个ADT中,quals操作必须合理定义. 基本数据类型,也称原始数据类型.byte,sho

【软件构造】第一章 软件构造基础(2)

二.软件构造的质量目标 1. 外部属性(主要):影响用户感受,如外观.速度等 (1)正确性:符合规格范围和计划目标 ·只保证各个层面的正确性(假设调用正确) ·检验与调试 ·防御性编程 ·形式化编程 (2)健壮性:响应规格范围外的异常情况 ·提示错误信息 ·正常退出或降级 (3)可扩展性:提供增加新功能的空间 ·固化需求以规避风险 ·设计简洁.离散化 (4)可复用性:使软件模块能够被其他程序使用 ·模式固化 (5)兼容性:跨平台.跨软件交互 ·使用标准文件格式.数据结构.接口,保持一致性 ·定义

【软件构造】第二章第二节 软件构造的过程、系统和工具

第二章第二节 软件构造的过程.系统和工具 Outline 广义的软件构造过程 编程 静态代码分析 动态代码分析 调试与测试 重构 狭义的软件构造过程 构造系统:经典BUILD场景 构造系统的组件 构造过程和构造描述 Java编译工具 子目标和结构变体 构造工具 Notes ## 广义的软件构造过程 [编程(Coding)] 开发语言:如Java.C.Python 使用IDE(集成开发工具)的优势(组成) 方便编写代码和管理文件(有代码编辑器,代码重构工具.文件和库(Library)管理工具) 能

【软件构造】第六章第一节 可维护性的度量与构造原则

第六章第一节 可维护性的度量与构造原则 本章面向另一个质量指标:可维护性--软件发生变化时,是否可以以很小的代价适应变化? 本节是宏观介绍:(1)什么是软件维护:(2)可维护性如何度量:(3)实现高可维护性的设计原则--很抽象. Outline 软件的维护和演化 可维护性的常见度量指标 聚合度与耦合度 面向对象五大原则SOLID 单一职责原则SRP(Single Responsibility Principle) 开放封闭原则OCP(Open-Close Principle) 里式替换原则LSP

软件构造2

HIT - 软件构造 3章: 基本数据类型:int,long,boolean,double,char,short,byte,float 对象数据类型:classes,interface,arrays,enums,annotations Java是一种静态类型的语言,所有变量的类型在编译是已知的,Java可以静态检查,在像python这样的动态类型语言中,这种检查被推迟到运行时. 静态检查的类型:语法错误,名字错误,参数个数错误,参数类型错误,返回错误 动态检查的类型:非法参数,非法返回值,数组越