在C#中的方法锁定 [英] Method lock in c#

查看:792
本文介绍了在C#中的方法锁定的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个类,这三种方法。这个类被多个线程。 我想方法1等待,如果方法2和/或Method3任何线程正在运行。 有什么建议?

 公共类的Class1
{
    公共静态无效方法1()
    {
        对象lockThis =新的对象();

        锁定(lockThis)
        {
            //身体功能
        }
    }

    公共静态无效的方法2()
    {
         //身体功能
    }

    公共静态无效Method3()
    {
         //身体功能
    }
}
 

解决方案

如果我理解正确的,你需要的是这样的:

 静态对象lockMethod2 =新的对象();
静态对象lockMethod3 =新的对象();

公共静态无效方法1()
{
    锁定(lockMethod2)
    锁定(lockMethod3)
    {
        //身体功能
    }
}

公共静态无效的方法2()
{
    锁定(lockMethod2)
    {
        //身体功能
    }
}

公共静态无效Method3()
{
    锁定(lockMethod3)
    {
        //身体功能
    }
}
 

这使得method3执行,如果方法2正在运行,反之亦然,而方法1必须等待两个。当然,方法2和3将1时运行不运行。

I have one class with these three methods. This class is used by many threads. I would like the Method1 to wait, if Method2 and/or Method3 are running in any threads. Any suggestions?

public class Class1
{
    public static void Method1() 
    {
        Object lockThis = new Object();

        lock (lockThis)
        {
            //Body function
        }
    }

    public static void Method2() 
    {
         //Body function
    }

    public static void Method3() 
    {
         //Body function
    }
}

解决方案

If I understood correctly, you need something like this:

static object lockMethod2 = new object();
static object lockMethod3 = new object();

public static void Method1() 
{
    lock (lockMethod2)
    lock (lockMethod3)
    {
        //Body function
    }
}

public static void Method2() 
{
    lock (lockMethod2)
    {
        //Body function
    }
}

public static void Method3() 
{
    lock (lockMethod3)
    {
        //Body function
    }
}

This allows method3 to execute if method2 is running and vice versa, while method1 must wait for both. Of course, method2 and 3 will not run while 1 is running.

这篇关于在C#中的方法锁定的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆