多线程程序会造成资源同时被多个执行路径访问的安全问题。比如修改相同资源的两个线程可能都会被对方所干扰,在程序不知道的情况下,一个线程可能会覆盖掉其他线程对该资源的相关操作。然而如果情况好的话,被修改的资源可能会导致性能问题或者崩溃,这样我们能够很容易知道问题出在哪里并进行修复。但是情况糟糕的话,干扰仅仅造成让人无法察觉的错误,直到后面某个时刻(比如线上版本)造成程序出错,这应该就是很多程序员的噩梦了,哈哈哈。
我们应该要设计出一个让多线程程序线程安全的办法。避免线程之间的资源共享以及尽量的减少线程之间的交互,能有效地减少它们之间的相互干扰。由于我们没办法避免它们完全没有干扰的,所以当线程之间必须要进行交互时,我们可以使用同步工具来确保交互时的安全性。
在OS X和iOS中提供了大量的同步工具,从互斥工具到程序事件序列化。在接下来的几个部分将介绍这些工具,以及如何在代码中使用它们来保证程序资源的安全访问。
本人总结TIPS
- 多线程程序会造成资源同时被多个执行路径访问的安全问题;
- 用同步工具来确保交互时的安全性;