簡體   English   中英

靜態方法之間的調用-鋁箔螺紋是否安全?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM