如何在多线程环境中只执行一次挡路代码?

How to execute a block of code only once on a multithreading environment?(如何在多线程环境中只执行一次挡路代码?)

本文介绍了如何在多线程环境中只执行一次挡路代码?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

下面的代码挡路在C#中执行对象加载。

public bool IsModelLoaded { get; set; }
public override MyObject Load()
{
    if (!IsModelLoaded)
    {
        Model = MyService.LoadMyObject(Model);
        IsModelLoaded = true;
    }
    return Model;
}

我的目的是只运行此挡路一次,因此只加载Model一次。不过,此代码挡路从2个不同的线程运行了两次。

如何确保此挡路只运行一次?(在多个线程上)。

推荐答案

最简单的方法是添加

[MethodImpl(MethodImplOptions.Synchronized)]
public override MyObject Load()
{
   //snip
}
但请注意,这会锁定整个对象,而不仅仅是方法。不是很好的练习。

http://msdn.microsoft.com/en-us/library/system.runtime.compilerservices.methodimploptions.aspx

已同步

指定该方法一次只能由一个线程执行。静电方法锁定类型,而实例方法锁定实例。在任何实例函数中只能执行一个线程,在类的任何静电函数中只能执行一个线程。

这篇关于如何在多线程环境中只执行一次挡路代码?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!

本文标题为:如何在多线程环境中只执行一次挡路代码?