加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – 如何从另一个线程锁定方法的一部分?

发布时间:2020-12-16 00:24:55 所属栏目:百科 来源:网络整理
导读:如何从另一个线程中锁定c#中的一部分方法? 我的意思是如果其中一个线程在这里,然后退出… 例如: if(threads[0].WasHere){ return;} 解决方法 一种有效的方式是互锁交换;通过在工作期间将一些令牌字段设置为非默认值,其他线程可以检查并退出.例如: private
如何从另一个线程中锁定c#中的一部分方法?
我的意思是如果其中一个线程在这里,然后退出…
例如:

if(threads[0].WasHere)
{
   return;
}

解决方法

一种有效的方式是互锁交换;通过在工作期间将一些令牌字段设置为非默认值,其他线程可以检查并退出.例如:

private int hazWorker; // = 0 - put this at the scope you want to protect

然后:

// means: atomically set hazWorker to 1,but only if the old value was 0,and
// tell me what the old value was (and compare that result to 0)
if(Interlocked.CompareExchange(ref hazWorker,1,0) != 0) {
    return; // someone else has the conch
}
try {
    // your work here
} finally {
    Interlocked.Exchange(ref hazWorker,0); // set it back to default   
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读