共享受限资源

2024-06-03 19:58
文章标签 共享 资源 受限

本文主要是介绍共享受限资源,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

你可以把单线程程序当作在问题域求解的单一实体,每次只能做一件事情。因为只有一个

实体,所以你永远不用担心诸如“两个实体试图同时使用同一个资源”这样的问题,比如:

两个人在同一个地方停车,两个人同时走过一扇门,甚至是两个人同时说话。

 

在多线程的环境中,可以同时做多件事情。但是,“两个或多个线程同时使用同一个受限资

源”的问题也出现了。必须防止这种资源访问的冲突,否则,就可能发生两个线程同时试图

访问同一个银行帐户,向同一个打印机打印,改变同一个值等诸如此类的问题。

 

 

不正确地访问资源

 

 

考虑下面的例子,这里的类“保证”当你调用getValue( )方法时,总能返回一个偶数。同

时,另外一个名为“Watcher”的线程不断调用getValue( )方法并检查返回值是否真的

为偶数。这看起来好像没什么意义,因为从代码上看,返回值显然是偶数。但这恰恰是令

人惊奇之处。下面是该程序的第一个版本:

 

//: c13:AlwaysEven.java

// Demonstrating thread collision overresources by

// reading an object in an unstableintermediate

state.

 

public     class AlwaysEven {

private      int i;

public     void next() { i++; i++; }

public     int getValue() {            return i; }

public     static       void main(String[] args) {

final AlwaysEven ae =           new AlwaysEven();

newThread("Watcher") {

public     void run() {

while(true){

intval = ae.getValue();

if(val% 2 != 0) {

           System.out.println(val);

           System.exit(0);

         }

       }

      }

   }.start();

while(true)

     ae.next();


 

 

 

  }

///:~

 

在main( )中,建立了一个AlwaysEven对象,它必须是final的,因为它要被一个继承

自Thread的匿名内部类所访问。如果线程读出的值不是偶数,它将把这个值打印出来(以

证明它捕获了对象的不稳定状态)并退出程序。

 

这个例子表明了使用线程会遇到的基本问题。你永远不会知道线程是何时运行的。想象一

下,你坐在座子旁边,手里有一把叉子,准备叉起盘子里最后一块食物,当叉子碰到食物

的时候,它忽然消失了(因为你的线程被挂起,另一个线程跑进来偷走了食物)。这就是

你在写并发程序时要面临的问题。

 

你试图使用一个资源的同时,有时并不关心它是否正在被访问(比如别的盘子里的食物)。

但为了让多线程能工作,你就需要某种方法来防止两个线程访问同一个资源,至少是在某

个关键时间段内避免此问题。

 

要防止这类冲突,只要在线程使用资源的时候给它加一把锁就行了。访问资源的第一个线

程给资源加锁,接着其它线程就只能等到锁被解除以后才能访问资源,这时某个线程就可

以对资源加锁以进行访问。如果把汽车的前排座椅看成是受限资源的话,那么你的小孩大

喊一声“我要坐”,就相当于在声明上锁。


这篇关于共享受限资源的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1027966

相关文章

怎么让1台电脑共享给7人同时流畅设计

在当今的创意设计与数字内容生产领域,图形工作站以其强大的计算能力、专业的图形处理能力和稳定的系统性能,成为了众多设计师、动画师、视频编辑师等创意工作者的必备工具。 设计团队面临资源有限,比如只有一台高性能电脑时,如何高效地让七人同时流畅地进行设计工作,便成为了一个亟待解决的问题。 一、硬件升级与配置 1.高性能处理器(CPU):选择多核、高线程的处理器,例如Intel的至强系列或AMD的Ry

# VMware 共享文件

VMware tools快速安装 VMware 提供了 open-vm-tools,这是 VMware 官方推荐的开源工具包,通常不需要手动安装 VMware Tools,因为大多数 Linux 发行版(包括 Ubuntu、CentOS 等)都包含了 open-vm-tools,并且已经优化以提供与 VMware 环境的兼容性和功能支持。 建议按照以下步骤安装 open-vm-tools 而不

49个权威的网上学习资源网站

艺术与音乐 Dave Conservatoire — 一个完全免费的音乐学习网站,口号是“让每一个人都可以接受世界级的音乐教育”,有视频,有练习。 Drawspace — 如果你想学习绘画,或者提高自己的绘画技能,就来Drawspace吧。 Justin Guitar — 超过800节免费的吉他课程,有自己的app,还有电子书、DVD等实用内容。 数学,数据科学与工程 Codecad

未来工作趋势:零工小程序在共享经济中的作用

经济在不断发展的同时,科技也在飞速发展。零工经济作为一种新兴的工作模式,正在全球范围内迅速崛起。特别是在中国,随着数字经济的蓬勃发展和共享经济模式的深入推广,零工小程序在促进就业、提升资源利用效率方面显示出了巨大的潜力和价值。 一、零工经济的定义及现状 零工经济是指通过临时性、自由职业或项目制的工作形式,利用互联网平台快速匹配供需双方的新型经济模式。这种模式打破了传统全职工作的界限,为劳动

【C++】作用域指针、智能指针、共享指针、弱指针

十、智能指针、共享指针 从上篇文章 【C++】如何用C++创建对象,理解作用域、堆栈、内存分配-CSDN博客 中我们知道,你的对象是创建在栈上还是在堆上,最大的区别就是对象的作用域不一样。所以在C++中,一旦程序进入另外一个作用域,那其他作用域的对象就自动销毁了。这种机制有好有坏。我们可以利用这个机制,比如可以自动化我们的代码,像智能指针、作用域锁(scoped_lock)等都是利用了这种机制。

OpenStack:Glance共享与上传、Nova操作选项解释、Cinder操作技巧

目录 Glance member task Nova lock shelve rescue Cinder manage local-attach transfer backup-export 总结 原作者:int32bit,参考内容 从2013年开始折腾OpenStack也有好几年的时间了。在使用过程中,我发现有很多很有用的操作,但是却很少被提及。这里我暂不直接

基于springboot+vue+uniapp的“共享书角”图书借还管理系统小程序

开发语言:Java框架:springboot+uniappJDK版本:JDK1.8服务器:tomcat7数据库:mysql 5.7(一定要5.7版本)数据库工具:Navicat11开发软件:eclipse/myeclipse/ideaMaven包:Maven3.3.9 系统展示 后台登录界面 管理员功能界面 出借者管理 图书信息管理 图书归还管理 出租收入管理

汇编:嵌入式软件架构学习资源

成为嵌入式软件架构设计师需要掌握多方面的知识,包括嵌入式系统、实时操作系统、硬件接口、软件设计模式等。 以下是一些推荐的博客和网站,可以帮助你深入学习嵌入式软件架构设计: ### 1. **Embedded.com**    - **网址**: [Embedded.com](https://www.embedded.com/)    - **简介**: 这是一个专注于嵌入式系统设计的专业网

Unity 资源 之 Super Confetti FX:点亮项目的璀璨粒子之光

Unity 资源 之 Super Confetti FX:点亮项目的璀璨粒子之光 一,前言二,资源包内容三,免费获取资源包 一,前言 在创意的世界里,每一个细节都能决定一个项目的独特魅力。今天,要向大家介绍一款令人惊艳的粒子效果包 ——Super Confetti FX。 二,资源包内容 💥充满活力与动态,是 Super Confetti FX 最显著的标签。它宛如一位

Nacos Config 配置中心支持配置共享

文章目录 一、什么是配置中心二、Nacos Config2.1 Nacos Config 工作原理 (★)2.2 Nacos Config 的使用2.3 动态刷新2.4 配置共享2.4.1 同一个微服务的不同环境之间共享配置2.4.2 不同微服务中间共享配置 一、什么是配置中心 微服务架构下关于配置文件的存在以下问题: 配置文件相对分散。在一个微服务架构下,配置文件会随