博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
《代码整洁之道》—第13章13.8节很难编写正确的关闭代码
阅读量:5755 次
发布时间:2019-06-18

本文共 531 字,大约阅读时间需要 1 分钟。

本节书摘来自异步社区《代码整洁之道》一书中的第13章13.8节很难编写正确的关闭代码,作者【美】Robert C. Martin,更多章节内容可以访问云栖社区“异步社区”公众号查看。

13.8  很难编写正确的关闭代码

编写永远运行的系统,与编写运行一段时间后平静地关闭的系统是两码事。

平静关闭很难做到。常见问题与死锁[15]有关,线程一直等待永远不会到来的信号。

例如,想象一个系统中有个父线程分裂出数个子线程,父线程等待所有子线程结束,然后释放资源并关闭。如果其中一个子线程发生死锁会怎样?父线程将一直等待下去,而系统就永远不能关闭。

或者,考虑一个被指示关闭的类似系统。父线程告知全体子线程放弃任务并结束。如果其中两个子线程正以生产者/消费者模型操作会怎样呢?假设生产者线程从父线程处接收到信号,并迅速关闭。消费者线程可能还在等待生产者线程发来消息,于是就被锁定在无法接收到关闭信号的状态中。它会死等生产者线程,永不结束,从而导致父线程也无法结束。

这类情形并非那么不常见。如果你要编写涉及平静关闭的并发代码,请多预留一些时间搞对关闭过程。

建议:尽早考虑关闭问题,尽早令其工作正常。这会花费比你预期更多的时间。检视既有算法,因为这可能会比想象中难得多。

转载地址:http://mwnkx.baihongyu.com/

你可能感兴趣的文章
Cassandra索引详解
查看>>
字节、字、bit、byte的关系
查看>>
VMware12安装虚拟机教程、Ubuntu16.04安装教程(包括vmware tools的安装)
查看>>
洛谷P2891 [USACO07OPEN]吃饭Dining
查看>>
安装nginx和添加ssl证书
查看>>
卡尔曼滤波(Kalman Filter)
查看>>
Redis进阶实践之十二 Redis的Cluster集群动态扩容
查看>>
以太坊abi
查看>>
编译3.10内核 出现错误 “undefined reference to...." 解决方法
查看>>
马拉松入门必备基础知识
查看>>
科学家的奇思妙想:饲养分子奶牛
查看>>
三分钟看完京东区块链白皮书
查看>>
git之本地仓库关联远程仓库
查看>>
win7系统复制文件到u盘提示文件过大怎么办
查看>>
android 图片上传图片 报Socket: Broken pipe
查看>>
DataTable 指定位置添加列
查看>>
Java数据结构简述
查看>>
linux内核剖析(零)linux系统启动过程详解-开机加电后发生了什么
查看>>
Android 异步通信:图文详解Handler机制工作原理
查看>>
thinkphp最简单路由
查看>>