-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謝謝! –