小结

本章中我们举例讲解了 TOCTOU 问题、DCL 机制和复合操作问题。

TOCTOU 告诉了我们最最常见的需要加锁的模式;而 DCL 告诉我们如果想做一些“骚操作”(如不加锁),则需要掌握很多细节(如可见性、有序性);复合操作本质上和 TOCTOU 是一样的问题,只是表现形式更“新颖”一些,同时在解决的过程中我们意味到了在具体实现中,需要权衡“锁粒度”。

其实线程安全问题的“本质”还是比较简单的:一定是存在共享的可变状态。只是这个“本质”的外在体现多种多样,实际上很难快速鉴别,需要凭借经验。最好的治病是预防,在编码过程中尽量遵循一些原则,可以大幅减少可能出现的问题,这也是我们下一章要探讨的内容。