我试图独占访问或使用单独的锁定对象的同一个对象上的c#-lock()?

private class MyClass
{
    private static MyObject myObject = new MyObject();

    private void ModifyObject()
    {
        lock(myObject)
        {
            myObject.UnsafeMethod();
        }
    }
}

可以锁定myObject吗?还是必须声明另一个专用的锁定对象?

解决方法:

很好,任何对象都足以充当存储锁状态的位置.

但是,在任何代码审查中,它都是一个强烈的危险信号,表明程序员在考虑错误的锁定方式. .NET中没有“锁定对象使其具有线程安全性”这样的东西.这个概念确实存在,这是许多学术研究的主题,称为STM或软件事务存储.但是.NET框架中对此丝毫没有丝毫支持.

您使用锁来阻止代码.危险代码,可以由多个线程执行,并且可以读取或写入变量.源代码文件中特定位置通常存在多个位置的代码.您使用锁来确保只有一个线程可以在这些特定位置同时执行代码.因此,锁定状态与代码段而非对象相关联.因此,应该需要一个专用对象来存储这些特定部分的锁定状态.您可以通过拥有这样一个专用的对象来表明自己知道自己在做什么,而不仅仅是选择自己放置的对象.强大的自我记录功能,使您更容易查看发生锁定的位置,因为您只需搜索锁定变量的名称即可.

上一篇:我如何确保innodb线程安全


下一篇:CodeGo.net>如何锁定/解锁跨进程的文件?