多线程不安全函数的理解

一.   多线程不安全函数的定义

1. 多线程不安全函数

多线程不安全函数是指:一个进程中有很多全局变量以及函数(error、strtok、asctime等),各个线程对这些变量会产生干扰。

具体情况为:在多线程运行期间,库中每个线程有自己的本地存储空间,有时也会使用全局变量和静态变量,如果多线程同时访问全局变量和静态变量,就将出现意向不到的错误。这个在现在的多线程编程中一般都会通过同步机制(例如,加锁操作等)解决,但是,我们往往忽略了C run-time library 里面的一些函数使用了全局变量和静态变量,却没使用相应机制避免冲突。

2. 什么是线程安全?

线程安全就是多线程访问时,采用了加锁机制,当一个线程访问该类的某个数据时,进行保护,其他线程不能进行访问直到该线程读取完,其他线程才可使用。不会出现数据不一致或者数据污染。

线程不安全就是不提供数据访问保护,有可能出现多个线程先后更改数据造成所得到的数据是脏数据。

二.  线程不安全解决方法

1.  解决方法

线程不安全即当多个线程同时访问同一块资源时,造成资源数据不一致或数据污染。

解决方法如下:

(1)  加锁。

(2)  用局部变量保存数据。

2.  glibc 库中线程不安全函数举例

#include <dirent.h>

struct dirent *readdir(DIR *dirp);

readdir() 函数为读取目录内容功能。readdir() 函数因为内部使用了静态数据,即readdir() 函数调用成功时,返回指针所指向的 dirent 结构体是静态分配的,所以,readdir() 函数被认为不是线程安全的函数。

解决方法可以采用局部变量保存数据,也可以加锁使用;当然还可以使用readdir_r() 函数。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值