线程安全函数与可重入函数

一、线程安全函数

1.定义

如果进程中有多个线程同时在运行,并且这些线程可能会同时调用这个函数时,该程序的运行结果与在单线程运行时结果是一样的,而且其他变量的值也和预期的是一样的,则可称该函数是线程安全的。

2.危及线程安全的因素

(1)没有对函数中使用的共享变量(全局变量、静态变量)进行线程同步。

(2)在函数中调用非线程安全函数。

(3)函数返回静态对象的指针或引用。

3.实现线程安全的方法

(1)对共享变量加锁,来保证对共享变量操作的串行化,从而保证多线程对共享变量的读写正确性。(即线程在使用共享变量时,会检测是否有其他线程在加锁使用,如果无则加锁使用,如果有则阻塞至变量可用)

(2)线程本地化(共享变量私有化),为每一线程都准备一份共享变量的副本。线程只操作本地的共性变量副本,线程之间不进行共享。

二、可重入函数

1.定义

 可重入函数可以被多个线程并发使用,而不必担心数据错误,且可重入函数可以在任意时刻被中断,从中断处重新运行,也不会影响运行结果。即可重入函数的运行结果具有确定性和可重复性。可重入函数的运行结果只与调用者提供的参数相关。

2.危及可重入性的因素

(1)使用了共享变量(全局变量、静态变量)。

(2)在函数中调用不可重入函数。

(3)函数返回静态对象的指针或引用。

三、线程安全和可重入的关系和区别

线程安全与可重入_Payshent的博客-CSDN博客_线程可重入

 

posted @ 2022-09-17 11:35  mshentai  阅读(169)  评论(0编辑  收藏  举报