本文共 531 字,大约阅读时间需要 1 分钟。
本节书摘来自异步社区《代码整洁之道》一书中的第13章13.8节很难编写正确的关闭代码,作者【美】Robert C. Martin,更多章节内容可以访问云栖社区“异步社区”公众号查看。
13.8 很难编写正确的关闭代码
编写永远运行的系统,与编写运行一段时间后平静地关闭的系统是两码事。平静关闭很难做到。常见问题与死锁[15]有关,线程一直等待永远不会到来的信号。
例如,想象一个系统中有个父线程分裂出数个子线程,父线程等待所有子线程结束,然后释放资源并关闭。如果其中一个子线程发生死锁会怎样?父线程将一直等待下去,而系统就永远不能关闭。
或者,考虑一个被指示关闭的类似系统。父线程告知全体子线程放弃任务并结束。如果其中两个子线程正以生产者/消费者模型操作会怎样呢?假设生产者线程从父线程处接收到信号,并迅速关闭。消费者线程可能还在等待生产者线程发来消息,于是就被锁定在无法接收到关闭信号的状态中。它会死等生产者线程,永不结束,从而导致父线程也无法结束。
这类情形并非那么不常见。如果你要编写涉及平静关闭的并发代码,请多预留一些时间搞对关闭过程。
建议:尽早考虑关闭问题,尽早令其工作正常。这会花费比你预期更多的时间。检视既有算法,因为这可能会比想象中难得多。
转载地址:http://mwnkx.baihongyu.com/