线程安全函数与可重入函数
一、线程安全函数
1.定义
如果进程中有多个线程同时在运行,并且这些线程可能会同时调用这个函数时,该程序的运行结果与在单线程运行时结果是一样的,而且其他变量的值也和预期的是一样的,则可称该函数是线程安全的。
2.危及线程安全的因素
(1)没有对函数中使用的共享变量(全局变量、静态变量)进行线程同步。
(2)在函数中调用非线程安全函数。
(3)函数返回静态对象的指针或引用。
3.实现线程安全的方法
(1)对共享变量加锁,来保证对共享变量操作的串行化,从而保证多线程对共享变量的读写正确性。(即线程在使用共享变量时,会检测是否有其他线程在加锁使用,如果无则加锁使用,如果有则阻塞至变量可用)
(2)线程本地化(共享变量私有化),为每一线程都准备一份共享变量的副本。线程只操作本地的共性变量副本,线程之间不进行共享。
二、可重入函数
1.定义
可重入函数可以被多个线程并发使用,而不必担心数据错误,且可重入函数可以在任意时刻被中断,从中断处重新运行,也不会影响运行结果。即可重入函数的运行结果具有确定性和可重复性。可重入函数的运行结果只与调用者提供的参数相关。
2.危及可重入性的因素
(1)使用了共享变量(全局变量、静态变量)。
(2)在函数中调用不可重入函数。
(3)函数返回静态对象的指针或引用。
三、线程安全和可重入的关系和区别
线程安全与可重入_Payshent的博客-CSDN博客_线程可重入