静态方法是线程安全的吗?

本文关键字:安全 线程 静态方法 | 更新日期: 2023-09-27 18:09:40

我正在阅读这个stackoverflow帖子,它给出了示例代码:

static void modifySharedResource(SomeClass sc)
    {
        //do something
        lock (_lock)
        {
            //where sc is modified
        }
    }

我很好奇,为什么这个静态方法需要一个锁,静态方法在这个例子中线程安全吗?

我也读了这篇文章,但是我不明白答案。

谁能给我的问题更详细的信息,谢谢!

静态方法是线程安全的吗?

方法是否线程安全取决于它是否访问共享资源(例如静态变量,…)。方法是否是静态的与此无关。

在您的情况下,不能确定修改sc是否线程安全。这取决于如何创建该参数并将其传递给方法。在大多数情况下,如果传入的参数是共享的,则会出现问题。当我们开发一个函数时,我们应该确保无论如何使用该函数都不会出现问题。

与您的lock(我假设_lock是一个静态变量),您仍然实现线程安全,如果sc在另一个线程上共享和修改。

使用名为modifySharedResource的方法(参数是共享),我很确定如果参数在另一个线程的其他地方也被修改,则存在问题。

一般来说,修改传入参数是一种不好的做法:https://softwareengineering.stackexchange.com/questions/245767/is-it-an-antipattern-modifying-an-incoming-parameter

你对线程安全有一个误解,关键字lock在自己的参数(代码中的_lock)的同步块索引中标记位,另一个lock不能通过,直到其他锁释放_lock并恢复位

这里的问题是SomeClass不是线程安全的。这里的静态方法是线程安全的。