c# - 是否可以使一段代码原子化 (C#)?

标签 c# multithreading

当我说原子时,我的意思是指令集将在没有任何上下文切换的情况下执行到同一进程上的另一个线程(当然必须完成其他类型的切换)。我想出的唯一解决方案是暂停所有线程,除了当前在部分之前执行的线程并在它之后恢复它们。还有更优雅的方式吗?

我想这样做的原因是收集在多个线程上运行的对象的连贯状态。但是,它们的代码不能更改(它们已经编译),所以我不能在其中插入互斥量、信号量等。原子操作当然是状态收集(即复制一些变量)。

最佳答案

Interlocked中有一些原子操作类,但它只提供了一些非常简单的操作。它不能用于创建完整的原子代码块。

我建议谨慎使用锁定,以确保即使上下文发生变化,您的代码仍能正常工作。

关于c# - 是否可以使一段代码原子化 (C#)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4631252/

相关文章:

c# - 选择表的列名和类型

c++ - openmp写入磁盘线程安全吗?

java - 理解死锁、同步

python - PyQt4 和写入串行是否需要多线程

java - 如果 Java 线程已经被该线程占用,为什么还必须重新进入该锁?

c# - 动态连接和缩小 JavaScript 或在构建时 - ASP.NET MVC

c# - 使用依赖注入(inject)在工作线程中实例化对象

c# - C++/CLI 包装器只能在 x86 机器上正常工作,我需要 x64 机器

c# - 将 MySQL Decimal 数据类型转换为 C# float 数据类型

java - 使用什么工具包可以在绘画中制作多个线程? Swing、GWT、FX、Qt 还是什么?