线程安全和可重入函数

线程安全

线程安全:一个函数称为线程安全,当且仅当被多个并发线程反复调用时,它一直产生正确的结果。如果一个函数不是线程安全的,我们就说它是线程不安全的。
以下我们定义4种,线程不安全的函数:
(第1类):不保护共享变量的函数,比如对一个全局变量多个线程操作,产生错误结果;
解决方法:利用像P,V操作这样的同步操作保护共享变量,优点:不用改代码,缺点:程序执行时间变慢。
(第2类):保持跨越多个调用的状态函数,简单说就是多个线程正在被调用的函数里调用了别的函数,例如rand函数;
这样没办法得重写。
(第3类):返回指向静态变量的指针的函数,不安全因为一个正在使用的结果会被另一个进程覆盖掉。
解决方法:可以使用加锁—拷贝技术:将线程不安全的函数与互斥锁联系起来。在每一个调用的位置对互斥锁加锁,调用线程不安全函数,将结果拷贝到私有存储位置,然后对互斥锁解锁,每个线程使用自己的私有拷贝。
(第4类:)调用线程不安全函数。

可重入性

可重入函数具有:当它们被多个多个线程调用不会引起任何共享数据
是一类重要的线程安全函数。

这里写图片描述
显示可重入:如果所有函数都是传值,且所有数据的引用都是本地的自动栈变量,那么这个函数无论被如何的调用它都是线程安全的。
隐式可重入:函数参数传的的是指针,如果调用的线程小心的传递的指向非共享数据的指针,那么它是线程安全的。
还有一点:可重入性有时既是调用者也是被调用者的属性,并不是只有被调用者单调具有的属性。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值