程序设计技巧

线程泄漏

线程执行任务时,若任务发生错误抛出异常,而未处理异常,线程被强制打断,无法正常执行,导致资源泄漏。

破坏性

对于线程池来说,线程泄漏意味着线程池可用线程永远减少,若这种情况发生次数足够多,最终线程池无可用线程,无法处理任务,当任务堆积过多,内存耗尽,最终导致程序崩溃。

解决方案

为防止任务抛出异常而导致线程泄漏,加入异常处理机制,在执行任务时捕获异常,保证工作线程正常运行,增强线程池的健壮性。

虚假激活(待重写)

对于多核处理器,当一个线程通过条件变量发送激活信号,激活单个或者多个阻塞于此条件变量的线程,然而对于被激活的线程来说,存在不满足执行条件的情况。这种效应称为虚假激活。

破坏性

激活不满足执行条件的线程,所产生的影响取决于程序健壮性,可能导致运算出错,也可能抛出异常而导致线程崩溃,甚至还可能导致其他线程出错。

解决方案

针对此问题提供两种方案,一种在激活之时检查执行条件,另一种在激活之后检查执行条件。

两种方案作用线程不同。第一种方案作用于发送激活信号的线程,若不满足条件,则不进行激活操作。第二种方案作用于阻塞的线程,若不满足条件,再次进入阻塞状态。

激活先于阻塞(待重写)

一线程通过条件变量发出激活信号可能先于另一线程等待条件变量。

破坏性

激活先于阻塞,其影响轻则线程因此错过一次执行时机,重则线程一直处于阻塞状态而无法执行。

情形

此线程负责执行任务,一次执行时因等待任务而阻塞,彼线程负责分配任务并激活线程。倘若激活先于阻塞,彼线程分配任务之后,此线程仍阻塞,占据任务却不执行任务,彼线程因此无法再次分配任务,即无法再次激活线程,于是此线程一直处于阻塞状态。

解决方案

在等待条件变量之前,检查是否满足执行条件,若满足条件就不必等待。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值