线程安全对象 - 静态与否?

Hou*_*man 11 .net multithreading locking

我最近在接受采访时,技术人员问我如何使应用程序线程安全.

好吧,在lock()正确解释之后,他说把对象当作静态不是一个好主意.

private static readonly object _syncLock = new object();
Run Code Online (Sandbox Code Playgroud)

他声称原因是静态使得线程锁定的对象比非静态时更慢.这是真的?

编辑:尽管如此,我仍然不确定.这三种方法有什么区别?

private static readonly object _syncLock = new object();
public static readonly object _syncLock = new object();
private readonly object _syncLock = new object();
Run Code Online (Sandbox Code Playgroud)

Dan*_*ner 12

如果锁定对象应该是静态的,则取决于要锁定的对象.如果要锁定类的实例,则不能使用静态锁定对象.如果要锁定静态数据,则无法使用实例锁定对象.所以似乎没有任何选择.

您可以考虑使用静态或实例锁定对象来锁定对实例数据的访问,但这会导致不同的行为.使用实例锁定对象时,只锁定实例,而静态锁定对象将锁定所有实例.所以在这里也没有选择性能调优的选择.


mat*_*t b 7

他声称原因是静态是在运行时运行而不是编译,并且会使线程锁定的对象比非静态时更慢.

这没有任何意义 - 我认为面试官不知道他在说什么,或者你可能误解了他的观点.