[英]Calls between static methods - will that foil thread safety?
在公共靜態類中,我具有以下本地方法:
private static int GetMaxFromList(IEnumerable<int> list)
{
var result = 0;
foreach (var i in list)
{
if (i > result) result = i;
}
return result;
}
類中的一些公共方法調用此方法(示例):
public static bool IsIntegrityOfDataSetGood(DataSet dataSet, KeyValuePair<string, List<int>> tableAndColumnIndexes)
{
return IsIntegrityOfDataSetGood(dataSet, tableAndColumnIndexes.Key) &&
dataSet.Tables[tableAndColumnIndexes.Key].Columns.Count > GetMaxFromList(tableAndColumnIndexes.Value);
}
請注意,此公共方法還會在類中調用另一個公共方法。
類方法僅適用於通過參數發送給它們的數據,但是我擔心靜態方法之間的調用會破壞線程安全性。 我有擔心的權利嗎?
忘了提及此代碼位於.NET 2.0項目中。
不,這不會破壞您的線程安全性。
但是它是否真的是線程安全的取決於tableAndColumnIndexes
來自何處以及其他哪些線程可以訪問它。 換句話說,它取決於調用代碼。
只要沒有其他線程在更改list
順序,就絕對可以了。 它不訪問任何共享狀態-它僅使用其參數。 如果其他任何線程正在修改序列,則將收到InvalidOperationException
。
聽起來您可能對線程安全性和靜態方法有一些誤解,但是很難確切說明它們是什么……您可能會發現Eric Lippert的博客文章“線程安全性是什么?” 有用。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.