-1
请给我一些小代码片段,以了解可重入和线程安全的函数,以及既不属于它们也不属于它们之一的片段。Reentrant和ThreadSafe函数示例
请给我一些小代码片段,以了解可重入和线程安全的函数,以及既不属于它们也不属于它们之一的片段。Reentrant和ThreadSafe函数示例
我会尝试解释主要的差异,然后显示代码来演示这些概念。
首先,名称是一个用词不当。代码始终是线程安全的并且可重入安全。由于代码是不可变的,因此代码并不关心有多少线程正在执行它。相反,它的数据被操作的函数可能或可能不是线程安全的。在面向对象的代码中比在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
是安全的,因为它只取决于传入的值,并不以任何方式修改它们。
注意:这些事情都不足以确定线程安全性,但它们会为您提供良好的基准以确定代码是否为线程安全。
@senshin谢谢! –