相关疑难解决方法(0)

什么使方法线程安全?规则是什么?

是否存在使方法线程安全的整体规则/指南?我知道可能有一百万次一次性情况,但一般情况如何呢?这很简单吗?

  1. 如果方法只访问局部变量,那么它是线程安全的.

是吗?这也适用于静态方法吗?

@Cybis提供的一个答案是:

局部变量不能在线程之间共享,因为每个线程都有自己的堆栈.

静态方法也是如此吗?

如果方法传递给引用对象,那是否会破坏线程的安全性?我做了一些研究,并且有很多关于某些情况的研究,但我希望能够通过使用一些规则来定义遵循的指导方针,以确保方法是线程安全的.

所以,我想我的最终问题是:"是否有一个简短的规则列表定义了一个线程安全的方法?如果是这样,它们是什么?"

编辑这里
有很多好处.我认为这个问题的真正答案是:"没有简单的规则来确保线程安全." 凉.精细.但总的来说,我认为接受的答案提供了一个很好的简短摘要.总有例外.就这样吧.我可以忍受这一点.

c# thread-safety

143
推荐指数
3
解决办法
10万
查看次数

静态变量是否是线程安全的?C#

我想创建一个存储DataTables的类,这将阻止我的应用程序每次要检索它时导入详细信息列表.因此,这应该做一次,我相信下面的代码这样做,但我不确定它是否是线程安全的.

下面的代码位于我的三层应用程序的Business Layer部分,它将DataTable返回到表示层.

public class BusinessLayerHandler
{
    public static DataTable unitTable;
    public static DataTable currencyTable;

    public static DataTable GetUnitList()
    {
        //import lists each time the application is run
        unitTable = null;
        if (unitTable == null)
        {
            return unitTable = DatabaseHandler.GetUnitList();
        }
        else
        {
            return unitTable;
        }
    }

    public static DataTable GetCurrencyList()
    {
        //import lists each time the application is run
        currencyTable = null;
        if (currencyTable == null)
        {
            return currencyTable = DatabaseHandler.GetCurrencyList();
        }
        else
        {
            return currencyTable;
        }
    }
Run Code Online (Sandbox Code Playgroud)

任何帮助表示赞赏,如果有更好的方法来缓存DataTable,请告诉我. …

.net c# asp.net

42
推荐指数
4
解决办法
3万
查看次数

我需要在C#.Net中创建一个Thread安全的静态变量

好吧,它比问题复杂一点.

class A
{
   static int needsToBeThreadSafe = 0;

   public static void M1()
   {
     needsToBeThreadSafe = RandomNumber();
   }

   public static void M2()
   {
     print(needsToBeThreadSafe);
   }
}
Run Code Online (Sandbox Code Playgroud)

现在我要求在M1()和M2()之间调用'needsToBeThreadSafe'保持线程安全.

c# static thread-safety

11
推荐指数
3
解决办法
3万
查看次数

标签 统计

c# ×3

thread-safety ×2

.net ×1

asp.net ×1

static ×1