对比线程安全和可重入函数

来源:互联网 发布:管家婆软件多少钱 编辑:程序博客网 时间:2024/06/07 01:00

一、线程安全函数

1、什么是线程安全

        一个函数被称为线程安全,当且仅当它被多个并发的进程反复调用时,它会一直产生正确的结果。反之,如果一个函数不是线程安全的,我们就称它是不安全的。  线程安全主

要是针对数据竞争来说的,就是说,如果数据不需要共享,那就让每个数据私有,如果需要共享,就得加锁。

2、如何确保线程安全

       要确保线程安全,主要考虑的是线程之间的共享变量。属于同一进程的不同线程会共享内存空间中的全局区和堆,而私有的线程空间则主要包括栈和寄存器。因此,对于同

一进程的不同的线程来说,每个线程的全局变量都是私有的,而全局变量、局部静态变量、分配于堆的变量都是共享的。在对这些共享变量进行访问时,如果要保证线程安全,

则必须通过加锁的方式。

3、线程不安全的后果

     线程不安全可能导致的后果是显而易见的—-共享变量的值由于不同·线程的访问,可能会发生不可预料的变化,进而导致程序的错误,甚至崩溃。

 二、可重入函数

1、什么是可重入函数

     所谓“重入”,常见的情况是,当程序执行到某个函数func( )时,收到信号,于是暂停目前正在执行的函数,转到信号处理函数,而这个信号处理函数的执行过

程中,又恰恰也会到刚刚执行的函数func( ),这样便发生了所谓的重入。此时如果func( )能够正确的运行,而且处理完成后,之前暂停的func( )也能够正确运行,则

说明它是可重入的。

2、如何保证可重入

      如果一个函数符合以下条件之一则是不可重入的:

(1)调用了malloc或free,因为malloc也是用全局链表来管理堆的。

(2)调用了标准I/O库函数。标准I/O库的很多现实都以不可重入的方式使用全局数据结构。

(3)SUS规定有些系统函数必须以线程安全的方式实现。

三、可重入与线程安全的区别于函数

    1、线程安全是在多个线程情况下引发的,而可重入函数可以在只有一个线程的情况下来说。

    2、线程安全不一定是可重入的,而可重入函数则一定是线程安全的。

    3、若果一个函数中有全局变量,那么这个函数既不是线程安全也不是可重入的。

    4、如果将对临界资源的访问加上锁,则这个函数是线程安全的,但如果这个重入函数若锁还未释放则会产生死锁,因此是不可重入的。

    5、线程安全函数能够使不同的线程访问同一块地址空间,而可重入函数要求不同的执行流对数据的操作互不影响使结果是相同的。

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 上司离职了我该怎么办 我上司要辞职我怎么办 一方坚决不同意离婚我该怎么办 模拟农场车翻了怎么办 手机退出键坏了怎么办 dnf邮件发错了怎么办 手机提示sd卡已损坏怎么办 解压包文件数据损坏该怎么办 电脑被压缩后电脑打不开怎么办 眼睛里进了飞虫怎么办 虫子飞到眼睛里怎么办 云电脑pc版双鼠标怎么办 电脑蓝屏代码7f怎么办 笔记本电脑蓝屏开不了机怎么办 装xp系统后蓝屏怎么办 一键ghost断电了怎么办 如何防止cpu降频怎么办 win7 64位系统不兼容怎么办 网页无法加载打印机插件怎么办 微信提示安装了插件怎么办 电脑上不了网怎么办 win10 win10电脑突然没网了怎么办 笔记本玩战争前线发热严重怎么办 玩战争前线总是闪退怎么办 uu加速器卡在29怎么办 新ipad下载不了东西怎么办 福昕pdf阅读器找不到图章怎么办 战地4没达到分数怎么办 植物在太暗环境怎么办 玩绝地求生机型不支持怎么办 安卓安装包损坏怎么办 方舟手游安装包损坏怎么办 7p新机耗电快怎么办 不小心把图片删了怎么办 腿上毛又长又多怎么办 征兵体检体重太轻怎么办 体检发现颈部有淋巴节怎么办? 4岁宝宝汗毛重怎么办 嘴巴张开闭不上怎么办 口张开闭不上怎么办 要去当兵有痔疮怎么办