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

可重入函数与线程安全的区别和联系

时间:2016-07-13 23:37:22      阅读:177      评论:0      收藏:0      [点我收藏+]

标签:可重入函数与线程安全的区别和联系

1、可重入函数

     可重入函数即表示可以被多个执行流重复进入,意味着只使用自己栈上的变量,可以允许有该函数的多个副本在运行,由于它们使用的是分离的栈,所以不会互相干扰。

    一个不可重入函数的例子:

   int global;   

   int fun( int a )   

   {       

      int temp;       

      global = a;       

      temp = gloabl*2;       

      return temp;   

   }

    global是一个全局变量,若进程a运行这段代码传入的参数是2,预期的结果是4;进程b也运行这段代码,传入的参数是3,由于操作系统的进程调度,进程a中的global就有可能被覆盖,结果不一定是预期结果。

    要想保证函数是可重入函数,在函数体内不能访问全局变量,不使用静态局部变量,(静态变量和全局变量都存在静态区)坚持只使用局部变量,写出的函数就将是可重入的。如果必须访问全局变量,可以利用互斥信号量来保护全局变量。 

2、线程安全

线程: 是操作系统能够进行运算调度的最小单位,它被包涵在进程之中,是进程中的实际运作单位。一个进程中可以并行多个线程,每条线程并行执行不同的任务。

线程安全: 如果一段代码所在的进程中有多个线程在同时运行,而这些线程可能会同时运行这段代码。如果每次运行结果和单线程运行的结果是一样的,而且其他的变量的值也和预期的是一样的,就是线程安全的。线程安全问题是由全局变量及静态变量引起的。     

3、重入函数与线程安全的区别和联系

 联系:引发线程安全和可重入函数问题的原因是一样的,都是由于使用了全局变量及静态变量。

 区别:可重入函数问题,是对于不同进程间来说的,而线程安全问题是针对同一个进程中的不同线程来说的。

可重入函数与线程安全的区别和联系

标签:可重入函数与线程安全的区别和联系

原文地址:http://frankenstein.blog.51cto.com/10918184/1826102

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