作者热门文章
- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我在多线程应用程序中有一个方法,我希望调用此方法时出现以下行为:
C# 中的 lock
语句对于等待线程完成执行很有用,但我不想序列化对此方法的访问,而是绕过执行所述方法(如果它正在被执行)另一个线程。
最佳答案
您可以使用 Monitor.TryEnter 执行此操作,但也许更简单:互锁:
int executing; // make this static if you want this one-caller-only to
// all objects instead of a single object
void Foo() {
bool won = false;
try {
won = Interlocked.CompareExchange(ref executing, 1, 0) == 0;
if(won) {
// your code here
}
} finally {
if(won) Interlocked.Exchange(ref executing, 0);
}
}
关于c# - 如果另一个线程正在执行它,则退出该方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12412204/
我是一名优秀的程序员,十分优秀!