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

一、线程安全函数

1.定义

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

2.危及线程安全的因素

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

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

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

3.实现线程安全的方法

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

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

二、可重入函数

1.定义

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

2.危及可重入性的因素

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

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

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

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

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

 

posted @   mshentai  阅读(207)  评论(0编辑  收藏  举报
编辑推荐:
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
阅读排行:
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· 字符编码:从基础到乱码解决
· Open-Sora 2.0 重磅开源!
点击右上角即可分享
微信分享提示