什么是Thread Safe线程安全
Thread-safety(线程安全)是指代码被多个线程同时执行的时候仍然正常工作。尤其是要满足当多个线程都需要访问同一共享数据空间的时候,只有一个线程能被满足。
多线程执行的时候是处在一个共享地址空间,每个线程都可以访问其他线程的内存空间。为了使程序符合预定的执行的逻辑顺序,提出了线程安全的概念,符合线程安全标准的代码可以更好地得到控制、预测,不至于陷入后期Bug调试而无从下手的尴尬境地。
在实际中要判定一段代码是线程安全的会比较困难,而往往采用相反的策略:如何会导致线程不安全?下面列出了常见的一部分。
访问了全局变量或使用了堆(尤其没有自动回收的时候)。
分配/释放全局限制的资源,比如文件,子进程。
通过指针等类似的间接访问方式。
另一方面,有时也可以保证一段代码(或函数)是线程安全的,如果它:
仅仅使用栈中的局部变量
仅访问输入的参数(实际就是在栈中)
仅调用满足上面两条的代码(或函数)
这种代码属于叫“pure” function,封闭加工的方式工作。再多这样的自闭线程都是安全的。
判定是困难的,但可以在局部范围内完全肯定(或否定)一个命题。