多线程调用函数理解

本文介绍了多线程调用同一个函数时的情况,指出若函数涉及全局变量或静态变量需考虑并发问题,而仅使用局部变量则无影响。接着,探讨了线程安全函数和可重入函数的概念及其区别,强调线程安全函数能解决资源冲突,可重入函数确保结果确定性和可重复性,并提供了编写可重入函数的规范。


1.多线程调用同一个函数的理解

多线程调用一个函数和一个线程调用一个函数是一样的,关键要看你的函数是否使用了一些全局的东西。

函数的调用有自己的栈,每个函数的栈都是独立的.

唯一要考虑的是,在调用这个函数中,如果函数里面有全局变量或者静态变量,则需要考虑并发的问题,都是局部变量则没有任何影响(局部变量都被分配在栈上)。


2.线程安全函数和可重入函数 

线程安全的(Thread-Safe):如果一个函数在同一时刻可以被多个线程安全地调用,就称该函数是线程安全的。线程安全函数解决多个线程调用函数时访问共享资   源的冲突问题。

可重入(Reentrant):函数可以由多于一个线程并发使用,而不必担心数据错误。可重入函数可以在任意时刻被中断,稍后再继续运行,不会丢失数据。可重入   性解决函数运行结果的确定性和可重复性。可重入函数编写规范为:
1、不在函数内部使用静态或全局数据 
2、不返回静态或全局数据,所有数据都由函数的调用者提供。 
3、使用本地数据,或者通过制作全局数据的本地拷贝来保护全局数据。
4、如果必须访问全局变量,利用互斥机制来保护全局变量。
5、不调用不可重入函数。

两者之间的关系:
1、一个函数对于多个线程是可重入的,则这个函数是线程安全的。
2、一个函数是线程安全的,但并不一定是可重入的。
3、可重入性要强于线程安全性。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值