本文介绍了如何在多线程环境中只执行一次挡路代码?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
下面的代码挡路在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
已同步
指定该方法一次只能由一个线程执行。静电方法锁定类型,而实例方法锁定实例。在任何实例函数中只能执行一个线程,在类的任何静电函数中只能执行一个线程。
这篇关于如何在多线程环境中只执行一次挡路代码?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本站部分内容来源互联网,如果有图片或者内容侵犯您的权益请联系我们删除!