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

弗拉迪斯拉夫

我如何从另一个线程锁定c#中的一部分方法?我的意思是,如果其中一个线程在这里,则退出...例如:

if(threads[0].WasHere)
{
   return;
}
马克·格雷维尔(Marc Gravell)

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

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   
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

仅等待另一个线程的一部分-Java

如何从另一个路径中删除路径的一部分?

如何使Automapper映射另一个表的一部分的属性

如何在单独的线程中更新GTK + GUI的一部分,该线程不断从另一个进程读取数据?

powershell如何找出一个变量是否是另一个变量的一部分

Excel向导:如何创建一个公式,以将数字的一部分乘以一个单元格,另一部分乘以另一个

将QTableWidget的一部分复制到另一个

根据另一个索引列表删除列表的一部分

在另一个图像后面显示图像的一部分

将 div 的一部分放在另一个下面

将设置的一部分放在另一个文件中

用另一个位图擦除位图的一部分

仅从另一个脚本中获取脚本的一部分?

从另一个IList的一部分快速创建List

从另一个组件重新渲染组件的一部分

查找文本的一部分并写入另一个文件

PHP检查是否另一个数组的一部分

卡在“如果”测试中:另一个代码的一部分

pygame - 来自另一个表面的一部分的表面

编译方法,就好像它是另一个类的一部分

如何根据另一个张量的值更改 PyTorch 张量的一部分?

如何执行Jenkins构建作业,作为另一个作业构建的一部分

如何将切片的一部分换成另一个

如何提取datframe列的一部分并使用该提取创建另一个列

如何将线的一部分复制到另一个位置

如何获取另一个结构的一部分的结构数组(或指针)?在C

mix-blend-mode:如何防止圆的一部分与另一个圆融合

如何在Matlab中将数组的一部分存储到另一个数组?

如何将网页的一部分“流式传输”到另一个窗口?