2014-01-26 31 views

回答

2

我会尝试解释主要的差异,然后显示代码来演示这些概念。

首先,名称是一个用词不当。代码始终是线程安全的并且可重入安全。由于代码是不可变的,因此代码并不关心有多少线程正在执行它。相反,它的数据被操作的函数可能或可能不是线程安全的。在面向对象的代码中比在C中更容易演示,但该概念也转换为C.

下面是一个使用Java的一个简单的例子:

Class MyClass 
{ 
    private int _counter; 

    public MyClass() 
    { 
     _counter = 0; 
    } 

    public int unsafeMethod() 
    { 
     _counter = _counter + 1; 
     return _counter; 
    } 

    public int safeMethod(int a, int b) 
    { 
     return a + b; 
    } 
} 

在前面的例子,unsafeMethod是不安全的,因为它修改的变量。如果线程同时执行该方法,结果将不确定。 safeMethod是安全的,因为它只取决于传入的值,并不以任何方式修改它们。

注意:这些事情都不足以确定线程安全性,但它们会为您提供良好的基准以确定代码是否为线程安全。