活跃性问题

【编译原理笔记18】代码优化:活跃变量分析,可用表达式分析 关于活跃变量与可用表达式的分析。 阅读详情

JAVA应用程序无法从死锁中恢复,如果遇到这种情况我们就只能终止并重启它,并寄希望它不会再次出现。因此在设计的时候一定要排除那些可能导致死锁出现的条件。

死锁不是每次都出现,但往往实在最糟糕的情况--高负载的时候出现。呵呵

死锁

对于死锁要注意由多个线程形成的环路的锁依赖关系,很容易导致死锁。

锁顺序死锁

当2个线程试图以不同的顺序调用相同的锁,就有可能发生顺序死锁。如:

A--->锁住left--->尝试锁住right--->永久等待

B------>锁住right--->尝试锁住left--->永久等待

从上我们可见,如果都已相同的顺序获取锁的话就不会发生上述情况。由此可得,如果所有线程以固定顺序来获得锁,那么在程序中就不会出现锁顺序死锁问题。

动态的锁顺序死锁

有时候我们并不清楚在锁顺序上有足够的控制权来避免死锁的发生。如

	public void transforMoney(Account fromAccount,Account toAccount,DollarAmount amount){
		synchronized(fromAccount){
			synchronized(toAccount){
				……
			}
		}
	}

代码咋看上去没有什么问题,线程调用顺序是固定的,不太可能发生锁顺序死锁。但是如果A账户转钱到B账户,同时C账户转钱到A账户,就有会发生死锁的可能。可见,这里锁调用顺序不是固定的,它们依赖于导入的参数的顺序。

为了避免这种情况,我们需要控制加锁的顺序,但是参数顺序是无法控制的,所以我们自能从Account自身来处理。

1、通过比较Account来进行加锁,如首先加载小的,或是存在唯一性的东西

2、如果无法比较,可以通过System.identityHashCode,返回对象的hashCode,通过比较hashCode来加锁。当然存在极端的情况就是得到的hashCode值相同,这就需要考虑别的方法了,这种极端情况极少发生,其实可以放心使用

3、最后一种方法就是使用加时赛锁,算是在hashCode基础上再增加区别条件

在协作对象之间发生的死锁

在持有锁时调用某个外部方法,那么将出现活跃性问题。在这个外部方法中可能会获取其他锁,或者阻塞时间过长,导致其他线程无法及时获得当前被持有的锁。

如,汽车位置的实时显示。我们在设置汽车的位置时需要加锁,而显式汽车位置时也需要加锁,放置重复调用。这是2个不同的代码,它们都用到了汽车的位置这个公共资源,如果在设置位置的同时显示汽车位置,那么就会发生活跃性问题。当然实际情况中我们可以使用并发容器来实现。

开放调用

如果在调用某个方法时不需要持有锁,那么这种调用就被称为开放调用。在程序中应尽可能使用开发调用。与那些在持有锁时调用外部方法的程序相比,更易于对依赖于开放调用的程序进行死锁分析。

开放调用类似于封装技术,将需要同步的东西封装在程序内部,对外这部分不可见,也就不会对外产生影响,就避免了协作对象间的死锁问题。

资源死锁

这个顾名思义,就是对资源的争夺且不释放导致的死锁啦。

死锁的避免和诊断

如果一个程序每次至多只能获得一个锁,那么就不会产生锁顺序死锁。如果必须使用多个锁,那么在设计的时候必须考虑锁的顺序;尽量减少潜在的加锁交互数量,将好哦去锁时需要遵循的协议写入正式文档并始终尊续这些协议。

在使用细粒度锁的程序中,可以通过以下2个阶段来检查代码中的死锁:

1、找出在什么地方将获取多个锁,这个集合要尽量的小

2、对所有这些实例进行全局分析,从而确保它们在整个程序中获取锁的顺序都保持一致。

支持定时的锁

有一项技术可以检测死锁和从死锁中恢复,就是使用显式锁Lock的定时功能,如果超出指定时限,就会退出锁。这个很接近于哲学家就餐问题的解决方案了,即在无法获取所有资源的时候,释放手中的资源,等待一段时间再去获取。

通过线程转储信息来分析死锁

我们可以通过JVM的线程转储来识别死锁的发生

其他活跃性危险

饥饿

当线程由于无法访问它所需的资源而不能继续执行时,就发生了饥饿。引发饥饿的最常见资源就是CPU时钟周期。

糟糕的响应性

这种情况常见于糟糕的GUI应用程序。如果调用了一个耗时的后台线程,那么前台就会失去响应。可以使用SwingWork来避免这种情况。

活锁

活锁不会阻塞线程,但是不能继续执行。 当多个相互协作的线程都对彼此进行响应从而修改各自的状态,并使得任何一个线程都无法继续执行时,就发生了活锁。就好比在路上两个相向的人,互相让路,每次都移动到同一边,一直反复的避让下去,就发生了活锁。

P问题,NP问题,NPC问题,NPH问题概念。’0/1背包判定问题是NPC问题‘和‘0/1背包问题是NPH问题但不是NPC问题’以及碰撞集是NPC问题‘证明。 (2)b个点的vertex cover 集 对应规模大小为b的碰撞集 :对于每一条边,至少有一个端点在b个点的vertex cover集 中,所以这个集合和。(1)构建图G为碰撞集的映射:其中图G的每一个点对应碰撞集的每个元素,每条边对应。(3)规模大小为b的碰撞集对应b个点的vertex cover集:任意的。但0/1背包判定问题是NPC问题,0/1背包问题不比其更容易,所以,它是NPH问题。综上所述,顶点覆盖问题可以归约到碰撞集,因此碰撞集也是NPC问题。,在多项式时间内可以完成,故碰撞集是NP问题。 阅读详情

相关推荐

P问题、NP问题、NPC问题和NPH问题

P问题 理解P问题需要了解的知识:多项式、时间复杂度。 多项式:ax^n-bx^n-1+c,就是在数学上经常见到的式子。 时间复杂度:指执行算法所需要的计算工作量,它定性描述该算法的运行时间。时间复杂度常用大O表述,例如O(n^2),代表其时间复杂度为n^2。 P问题:存在多项式时间算法的问题。(P:polynominal,多项式)。通俗来讲,如果一个问题可以找到一个能在多项式的时间里解决它的算法,那么这个问题就属于P问题。例如,给定一个数组需...

qq_37164897的博客 2327

线程的活跃性问题

前面我们了解了多线程带来的安全性问题,接下来我们来看下多线程带来的活跃性问题。 一、活跃性问题 线程是为任务而生的,理想情况下,我们希望线程能一直处于运行(Runnable)状态,但是会由于一些因素,如处理器资源有限导致的上下文切换、程序自身的错误和缺陷。这些由于资源稀缺或者程序自身问题导致线程无法一直处于 Runnable 状态运行下去,又或者因为线程处于 Runnable 状态但是其要执行的任务一直无法进展的现象就被称为线程活跃性问题或活性故障。我们常见的“死锁”就是一种典型的活跃性问题,除了“死锁”,

hncboy的博客 1240

NP问题,不可解问题

NP问题概要:NP问题集中研究 P?=NP。现在普遍认为P!=NP。 P问题(polynomial):多项式时间内可以求出解的问题,polynomial中文意思是多项式。信息学竞赛出的问题都是P类问题,因为让你用指数级的时间来搜索答案的问题毫无意义。 NP问题:在多项式时间内可以验证一个解是否正确的问题。这里假设有一台非确定性图灵机,什么是非确定性图灵机呢?通俗点说就是一台可以猜出一个问题的解的机器

#include 3414

【并发编程】(六)线程活跃性问题(死锁、饥饿、活锁)

1.什么是死锁 1.1.活跃性问题 2.产生死锁的原因 2.1.顺序死锁 2.1.1.显式加锁顺序导致的死锁 2.2.2.对象互相调用导致的死锁 2.2.资源死锁 3.死锁的诊断 4.其它问题 4.1.饥饿 4.2.活锁

积木成林,聚沙成塔 969

YOLOv13+SAHI实战:5步搞定无人机航拍小目标检测(附VisDrone数据集调参技巧)

本文详细介绍了如何结合YOLOv13与SAHI(切片辅助超推理)技术,在VisDrone2019数据集上实现高效的无人机航拍小目标检测。通过5个实战步骤,包括环境配置、SAHI参数解析、数据集调优、完整训练推理流程和性能优化技巧,帮助开发者显著提升小目标检测的准确率和效率。

egg99的博客 430

【博弈论】势博弈(potential game)、EPG以及最佳响应、Nash均衡和帕累托(pareto)最优的理解

文章目录前言一、Potential game二、Nash均衡和Pareto-optimal(帕累托最优)1.Nash 均衡2.Pareto最优三、Best response(最佳响应)四、Exact potential game(EPG)1.合作-傀儡博弈2.合作博弈3.傀儡博弈4.自激博弈5.双边对称交互博弈使用理解 前言 本文主要详细讲解potential game的概念以及Exact potential game 的定义和分类,以及这么博弈方法是如何在论文中引入并使用的,本文仅是对自己在该模块

weixin_44535200的博客 2万+

什么是活跃性?及常见活跃性问题

一个并发应用程序能及时执行的能力称为活跃性。 A concurrent application’s ability to execute in a timely manner is known as its liveness. 死锁 死锁描述了这样一种情景,两个或多个线程永久阻塞,互相等待对方释放资源。下面是一个例子。 Alphone和Gaston是朋友,都很讲究礼节。礼节有一个严...

TOOCRUEL 1万+

字符串替换—牛客网(C++实现)

一.题目描述 请你实现一个简单的字符串替换函数。原串中需要替换的占位符为"%s",请按照参数列表的顺序一一替换占位符。若参数列表的字符数大于占位符个数。则将剩下的参数字符添加到字符串的结尾。 给定一个字符串A,同时给定它的长度n及参数字符数组arg,请返回替换后的字符串。保证参数个数大于等于占位符个数。保证原串由大小写英文字母组成,同时长度小于等于500。 测试样例: “A%sC%sE”,7,[‘...

qq_38358582的博客 1523

Java并发编程实战 11 | 线程活跃问题(死锁,活锁和饥饿)

第二种活跃度问题是活锁。活锁与死锁非常相似,都是指程序永远得不到最终结果,但它们的表现形式有所不同。活锁中的线程不会像在死锁中那样完全卡住,而是不断地尝试某些操作,但这些操作会导致它们无法继续前进。比如,在路上我们相遇,都会礼貌地让路,结果你往右走,我往左走,又撞在一起,最后谁也过不去。情况是这样的:为了演示活锁的情况,我们可以对之前的死锁示例代码进行一些修改。以下是修改后的逻辑:类似地,两个线程都需要两个锁才能完成工作。每个线程都获取了第一个锁,但发现第二个锁不可用。

大厂小码农的博客 2058

值得苦练的100道Python经典练手题(全网最全,附详细答案,建议收藏)

这100道Python练习题涵盖了从基础语法到高级算法、从数据库操作到Web开发的各个方面,是备考数据库系统工程师的绝佳素材。建议按照章节顺序逐一练习,遇到难点可反复钻研,真正掌握每一道题背后的知识点。通过这些练习,不仅能提升Python编程能力,还能加深对数据库系统原理的理解,为考试和实际工作打下坚实基础。

yue_yun_的博客 9395

学习心得——COMSOL Multiphysics with MATLAB联合仿真及寻优计算

学习心得——COMSOL Multiphysics with MATLAB联合仿真及寻优计算

weixin_41678956的博客 8658

P问题、NP问题、NPC问题、NP hard问题

图论算法摘要 1. 图的概念 图 一个图(graph) G=(V,E)G=(V,E)G=(V,E) 由顶点(vertex)集 VVV 和边(edge)集 EEE 组成。 每一条边就是一个点对 (a,b),a,b∈V(a,b),a,b∈V(a,b),a,b∈V。有时候也把边叫做弧(arc)。 有向图 如果点对(a,b),a,b∈V(a,b),a,b∈V(a,b),a,b∈V是有序的,那么图就是有向的...

LittleBee的博客 4万+

【数据集】30 m地表温度LST数据集

【数据集】30 m地表温度LST数据集

WW、forever的博客 1131

P问题、NP问题、NP完全问题和NP难问题

转载出处。 https://blog.youkuaiyun.com/qq_21768483/article/details/80430590 在讲P类问题之前先介绍两个个概念:多项式,时间复杂度。(知道这两概念的可以自动跳过这部分) 1、多项式:axn-bxn-1+c 恩....就是长这个样子的,叫x最高次为n的多项式.... 咳咳,别嫌我啰嗦。。有些人说不定还真忘了啥是多项式了。。例如第...

u014044032的博客 7万+

【问题解决】解决 Python `PermissionError` 权限不足:文件/进程/端口全场景修复

本文总结了Python程序中常见的权限问题及解决方案,包括文件、进程和端口权限错误。文件权限问题通常由文件占用、权限不足或路径错误引起;进程问题多因权限不足或系统限制;端口问题则与端口占用、防火墙或特权端口相关。解决方案提供了详细的代码实现:文件权限管理器类(FilePermissionManager)包含检查权限(check_permission)、修复权限(fix_permission)、安全写入(safe_write)和安全删除(safe_delete)等方法,通过异常处理和临时文件等技术确保操作安全

博客 359

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

[总结]算法中的P问题、NP问题、NP完全问题和NP难问题

啊啊

databatman的工厂 6万+

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

到底什么是NP问题,NP hard问题,NP完全问题?

网上胡写的太多了。 时间复杂度 时间复杂度并不是表示一个程序解决问题需要花多少时间,而是当问题规模扩大后,程序需要的时间长度增长得有多快。也就是说,对于高速处理数据的计算机来说,处理某一个特定数据的效率不能衡量一个程序的好坏,而应该看当这个数据的规模变大到数百倍后,程序运行时间是否还是一样,或者也跟着慢了数百倍,或者变慢了数万倍。 不管数据有多大,程序处理花的时间始终是那么多的,我们就说这个程序很好,具有O(1)O(1)O(1)的时间复杂度,也称常数级复杂度;数据规模变得有多大,花的时间也跟着变得有多长,这

勤奋的懒猫的博客 3万+

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

算法4类问题:P问题、NP问题、NP完全问题、NP难问题

算法4类问题:P问题、NP问题、NP完全问题、NP难问题

m0_65207522的博客 5710

P问题、NP问题、NPC问题、NPH问题详解

P: Polynomial NP:Pon-deterministic Polynomial NP-Hard(NPH) NP-Complete(NPC) P 问题, 可以理解为:常数增长、线性增长问题 NP问题, 可以理解为:指数增长问题 要理解P问题、NP问题、NPC问题、NP-hard问题,需要先弄懂几个概念: 什么是多项式时间? 什么是确定性算法?什么是非确定性算法? 什么是规约/约化? 文章目录多项式时间(Polynomial time)确定性算法与非确定性算法确定性算法:非确定性算法:规.

学习日常记录 1万+

P问题,NP问题,NPC问题,以及三者之间的关系

一、以下是从百度知道上转载来的关于P问题,NP问题,NPC问题的解释 1、P问题 P是一个判定问题类,这些问题可以用一个确定性算法在多项式时间内判定或解出。如果一个判定性问题的复杂度是该问题的一个实例的规模n的多项式函数,则我们说这种可以在多项式时间内解决的判定性问题属于P类问题。P类问题就是所有复杂度为多项式时间的问题的集合。 NP是一个判定问题类,这些问题可以用一个确定算法在多项

chenchao's blog 7533

什么是NP问题,什么是NP hard问题,什么是NP完全问题。

http://www.cs.pitt.edu/~ztliu/wordpress/2011/05/np-problem/ 首先解释一下什么是NP问题,什么是NP hard问题,什么是NP完全问题。 看下面的图,他们之间的关系表示的比较清楚。 P Problem:这个应该最易理解,就是一个问题可以在Polynominal的时间的得到解决,当然,是对于任意input size。 NP

百川汇海 6万+

什么是P问题、NP问题和NPC问题

    这或许是众多OIer最大的误区之一。    你会经常看到网上出现“这怎么做,这不是NP问题吗”、“这个只有搜了,这已经被证明是NP问题了”之类的话。你要知道,大多数人此时所说的NP问题其实都是指的NPC问题。他们没有搞清楚NP问题和NPC问题的概念。NP问题并不是那种“只有搜才行”的问题,NPC问题才是。好,行了,基本上这个误解已经被澄清了。下面的内容都是在讲什么是P问题,什

matrix67的专栏 3247

P问题、NP问题、NPC问题、NP-hard问题详解

本文摘要:时间复杂度衡量算法随问题规模扩大的性能变化,分为常数级O(1)、线性O(n)、平方O(n²)及指数级复杂度。P类问题可在多项式时间内求解,NP类问题可在多项式时间内验证解。NPC问题是NP中最难的问题,所有NP问题可规约到它。NP-Hard问题范围更广,可能不属于NP类。P⊆NP,而NPC=NP∩NP-Hard。理解这些概念对区分高效算法(多项式时间)与不实用算法(指数时间)至关重要,其中NPC问题的解决意味着所有NP问题的解决。

人无远虑,必有近忧 6123

【算法】P问题 NP问题 NPC问题 NPH问题的定义与理解

一.前言 二.多项式 三.时间复杂度 四.P问题 五.NP问题 六.NPH问题,NPC问题 七.已经被证明的NPC问题 八.一些具体问题的总结 九.总结 一.前言        在讨论算法的时候,常常会说到这个问题的求解是个P类问题,或者是NP难问题等等,同时最近上课正在做算法分析与设计关于NP完全问题这一章的作业的时候,发现有很多概念理解的不是很透彻,然后就反复看老师的讲义,...

qq_36193984的博客 9638
上一篇: 任务执行与取消
下一篇: 并发性能和可伸缩性
weeweee
博客等级 码龄16年 10粉丝 44原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值