共享受限资源

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

相关文章

Linux samba共享慢的原因及解决方案

《Linuxsamba共享慢的原因及解决方案》:本文主要介绍Linuxsamba共享慢的原因及解决方案,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录linux samba共享慢原因及解决问题表现原因解决办法总结Linandroidux samba共享慢原因及解决

Rust中的Drop特性之解读自动化资源清理的魔法

《Rust中的Drop特性之解读自动化资源清理的魔法》Rust通过Drop特性实现了自动清理机制,确保资源在对象超出作用域时自动释放,避免了手动管理资源时可能出现的内存泄漏或双重释放问题,智能指针如B... 目录自动清理机制:Rust 的析构函数提前释放资源:std::mem::drop android的妙

java父子线程之间实现共享传递数据

《java父子线程之间实现共享传递数据》本文介绍了Java中父子线程间共享传递数据的几种方法,包括ThreadLocal变量、并发集合和内存队列或消息队列,并提醒注意并发安全问题... 目录通过 ThreadLocal 变量共享数据通过并发集合共享数据通过内存队列或消息队列共享数据注意并发安全问题总结在 J

解读静态资源访问static-locations和static-path-pattern

《解读静态资源访问static-locations和static-path-pattern》本文主要介绍了SpringBoot中静态资源的配置和访问方式,包括静态资源的默认前缀、默认地址、目录结构、访... 目录静态资源访问static-locations和static-path-pattern静态资源配置

NFS实现多服务器文件的共享的方法步骤

《NFS实现多服务器文件的共享的方法步骤》NFS允许网络中的计算机之间共享资源,客户端可以透明地读写远端NFS服务器上的文件,本文就来介绍一下NFS实现多服务器文件的共享的方法步骤,感兴趣的可以了解一... 目录一、简介二、部署1、准备1、服务端和客户端:安装nfs-utils2、服务端:创建共享目录3、服

python使用watchdog实现文件资源监控

《python使用watchdog实现文件资源监控》watchdog支持跨平台文件资源监控,可以检测指定文件夹下文件及文件夹变动,下面我们来看看Python如何使用watchdog实现文件资源监控吧... python文件监控库watchdogs简介随着Python在各种应用领域中的广泛使用,其生态环境也

使用Nginx来共享文件的详细教程

《使用Nginx来共享文件的详细教程》有时我们想共享电脑上的某些文件,一个比较方便的做法是,开一个HTTP服务,指向文件所在的目录,这次我们用nginx来实现这个需求,本文将通过代码示例一步步教你使用... 在本教程中,我们将向您展示如何使用开源 Web 服务器 Nginx 设置文件共享服务器步骤 0 —

Python使用pysmb库访问Windows共享文件夹的详细教程

《Python使用pysmb库访问Windows共享文件夹的详细教程》本教程旨在帮助您使用pysmb库,通过SMB(ServerMessageBlock)协议,轻松连接到Windows共享文件夹,并列... 目录前置条件步骤一:导入必要的模块步骤二:配置连接参数步骤三:实例化SMB连接对象并尝试连接步骤四:

Linux使用粘滞位 (t-bit)共享文件的方法教程

《Linux使用粘滞位(t-bit)共享文件的方法教程》在Linux系统中,共享文件是日常管理和协作中的常见任务,而粘滞位(StickyBit或t-bit)是实现共享目录安全性的重要工具之一,本文将... 目录文件共享的常见场景基础概念linux 文件权限粘滞位 (Sticky Bit)设置共享目录并配置粘

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

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