线程安全:当多个并发线程执行同一个函数,我们都能得到正确的返回值。
当多个线程并发的调用一个函数。如果对全局数据或者静态数据在不加任何锁以及安全性的处理情况下,就会对多次修改数据的错误。比如我正在愿意个线程里处理一个全局变量的-1;正减完。结果还没有返回,就被另一个线程切出去了,而那个线程全局变量还是处于没有被处理的-1的值;本身我想让那个全局变量执行两次-1;结果执行了一次。
所以这就是线程不安全。
确保线程安全:
要确保函数线程安全,主要需要考虑的是线程之间的共享变量。
属于同一进程的不同线程会共享进程内存空间中的全局区和堆,而私有的线程空间则主要包括栈和寄存器。因此,对于同一进程的不同线程来说,每个线程的局部变量都是私有的,而全局变量、局部静态变量、分配于堆的变量都是共享的。在对这些共享变量进行访 问时,如果要保证线程安全,则必须通过加锁的方式。
可重入函数:是线程安全的一中。它是线程安全函数的一个真子集。
特点:当它们被多个线程调用时,不会引用任何共享数据,也就是不引用静态或全局变量。
可重入函数的条件
1,不在函数内部使用静态或者全局数据
2,不返回静态或者全局数据,所有的数据都由函数调用者提供
3,使用本地数据,或者通过制作全局数据的本地拷贝来保护全局数据
4, 如果必须访问全局数据,使用互斥锁来保护
5,不调用不可重入函数