【发布时间】:2014-09-26 17:43:23
【问题描述】:
我有一段时间有这种困惑,静态方法实现线程是否安全,实例方法当然是线程安全的,如果我们为每个线程分配一个单独的实例,那么它们就不会干预,那么我意识到,线程安全更重要关于类型然后是方法,它们本身并不是内存分配,所以我们举个例子:
private static ConcurrentDictionary<int,int> cd;
public static void Method1(int userid)
{
// Modify static object cd based on userid key
}
public void Method2(int userid)
{
// Modify static object cd based on userid key
}
本质上,当运行时提供不同用户 ID 的多个线程访问时,两种方法之间没有区别。我已经测试过,但想验证我的理解是否正确。
【问题讨论】:
-
当你投反对票时,请解释原因,问题有什么问题。每个人都不必有同样的疑问。停止这种无声的投票,至少说出你的想法,这是相当随意和不尊重的
-
(不是反对者)这不是一个例子。什么都不做的方法总是线程安全的,
static与否。评论说修改cd,但cd本身就是一个ThreadSafeConcurrentDictionary,所以这就是为什么可以。 -
@weston 这就是为什么我在内部修改一个类型,静态 ConcurrentDictionary,而不是对于非实例方法,我可以为字典做到这一点,直到我保持它对线程唯一,但是这不适用于静态方法,因此两者的代码相似,修改静态类型
-
实例可以在不同的线程上使用!这是一个错误的假设。通常组件的设计者会阻止其他线程的访问,但它不是开箱即用的线程安全的!
-
@Schwarzie2478 主要取决于内部包含的类型,但是如果在静态类型这样的类型中没有什么需要显式线程安全,那么每个线程都有一个单独的实例就像给每个线程自己的内存一样一起工作。我明白了您的情况,但是用户需要确保在用于多线程的类型中不存在此类线程安全问题
标签: c# .net multithreading