码迷,mamicode.com
首页 > 编程语言 > 详细

可重入函数与线程安全

时间:2016-05-09 22:17:56      阅读:284      评论:0      收藏:0      [点我收藏+]

标签:多线程   线程安全   可重入函数   

    可重入函数与线程安全          

线程安全:

假如在一个函数中它是这么写的,在一个全局链表上存放数据,在单线程模式下,我们先new一个新的节点然后让head->next指向这个节点,这种场景在多线程场景下会是这样的过程,线程一new了一个节点,然后cpu转去执行线程二,线程二new一个节点后head->next指向线程二,然后执行线程一,线程一的head->next也指向它刚刚new出来的节点,这就导致一个head指向了两个节点,这也就是线程安全的问题。

导致线程安全问题需要满足下面两个条件:

1>:一定是发生在多个线程访问一个全局变量或者静态变量的场景下面。
2>:操作时非原子性的。

如何避免线程安全:

对访问全局或静态变量的语句前后加锁,这样就不会导致多个线程访问同一个资源的问题发生。

可重入函数:

可重入函数的概念很简单,就是这个函数是可以在任何时候都可以被打断,并且不会造成线程安全,由于在可重入函数中使用的都是线程自己的栈空间,变量是唯一的,不会造成访问同一个资源的问题,如果要在其种访问全局或静态变量还是要加上锁来避免冲突。

系统中有很些函数是不能用在可重入函数中的:例如malloc,new,还有一些I/O接口函数等。

本文出自 “痕迹” 博客,请务必保留此出处http://wpfbcr.blog.51cto.com/10696766/1771578

可重入函数与线程安全

标签:多线程   线程安全   可重入函数   

原文地址:http://wpfbcr.blog.51cto.com/10696766/1771578

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!