静态方法之间的调用 - 会阻止线程安全吗?

时间:2012-04-13 07:24:30

标签: c# static 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项目中。

2 个答案:

答案 0 :(得分:4)

不,这将影响你的线程安全。

但它是否真的是线程安全的取决于tableAndColumnIndexes来自何处以及其他线程可以访问它。换句话说,它取决于调用代码。

答案 1 :(得分:3)

只要没有其他线程正在改变list序列,它应该是绝对正常的。它不访问任何共享状态 - 它只使用其参数。如果任何其他线程 修改序列,您将获得InvalidOperationException

听起来你可能对线程安全和静态方法有一些误解,但很难确切地说出它们是什么......你可能会发现Eric Lippert的博客文章"What is this thing you call thread safe?"很有用。