函数的线程安全VS函数的可重入
来源:互联网 发布:什么叫网络打印机 编辑:程序博客网 时间:2024/06/05 19:14
函数的线程安全与可重入
线程安全的(Thread-Safe):如果一个函数在同一时刻可以被多个线程安全地调用,就称该函数是线程安全的。线程安全函数解决多个线程调用函数时访问共享资源的冲突问题。
可重入(Reentrant):函数可以由多于一个线程并发使用,而不必担心数据错误。可重入函数可以在任意时刻被中断,稍后再继续运行,不会丢失数据。可重入性解决函数运行结果的确定性和可重复性。可重入函数编写规范为:
1、不在函数内部使用静态或全局数据
2、不返回静态或全局数据,所有数据都由函数的调用者提供。
3、使用本地数据,或者通过制作全局数据的本地拷贝来保护全局数据。
4、如果必须访问全局变量,利用互斥机制来保护全局变量。
5、不调用不可重入函数。
两者之间的关系:
1、一个函数对于多个线程是可重入的,则这个函数是线程安全的。
2、一个函数是线程安全的,但并不一定是可重入的。
3、可重入性要强于线程安全性。
比如:strtok函数是既不可重入的,也不是线程安全的。加锁的strtok不是可重入的,但线程安全。而strtok_r既是可重入的,也是线程安全的。(具体可以查看man手册)
线程安全的(Thread-Safe):如果一个函数在同一时刻可以被多个线程安全地调用,就称该函数是线程安全的。线程安全函数解决多个线程调用函数时访问共享资源的冲突问题。
可重入(Reentrant):函数可以由多于一个线程并发使用,而不必担心数据错误。可重入函数可以在任意时刻被中断,稍后再继续运行,不会丢失数据。可重入性解决函数运行结果的确定性和可重复性。可重入函数编写规范为:
1、不在函数内部使用静态或全局数据
2、不返回静态或全局数据,所有数据都由函数的调用者提供。
3、使用本地数据,或者通过制作全局数据的本地拷贝来保护全局数据。
4、如果必须访问全局变量,利用互斥机制来保护全局变量。
5、不调用不可重入函数。
两者之间的关系:
1、一个函数对于多个线程是可重入的,则这个函数是线程安全的。
2、一个函数是线程安全的,但并不一定是可重入的。
3、可重入性要强于线程安全性。
比如:strtok函数是既不可重入的,也不是线程安全的。加锁的strtok不是可重入的,但线程安全。而strtok_r既是可重入的,也是线程安全的。(具体可以查看man手册)
- 函数的线程安全VS函数的可重入
- 函数的线程安全与可重入
- 函数的线程安全与可重入
- 函数的线程安全与可重入
- 转: 函数的线程安全和可重入
- 函数的线程安全与可重入
- 函数的线程安全与可重入
- 转: 函数的线程安全和可重入
- 函数的线程安全与可重入
- 可重入函数和线程安全的区别
- 可重入函数与线程安全的区别
- 线程安全与可重入函数的区别
- 线程安全和可重入函数的基本概念
- 可重入函数和线程安全的对比
- 线程安全与可重入函数的关系
- 线程安全与可重入函数的区别
- 线程安全和可重入函数的对比
- 线程安全与可重入函数的对比
- 归并算法、赢者树、败者树
- java第二周 任务一
- vtable
- .NET Micro Framework V4.2 QFE2新版本简介
- 顺序表和链表的区别
- 函数的线程安全VS函数的可重入
- TS文件合并命令
- NetBIOS_spec
- 海量数据处理算法
- 分布式应用上下文(Distributed ThreadLocal)
- 游标操作实例
- Eclipse快捷键
- ASP.NET服务器控件CheckBoxList修改
- 如何在vs2008上设置出行号呢!