当我说原子时,我的意思是指令集将在没有任何上下文切换的情况下执行到同一进程上的另一个线程(当然必须完成其他类型的切换)。我想出的唯一解决方案是暂停所有线程,除了当前在部分之前执行的线程并在它之后恢复它们。还有更优雅的方式吗?
我想这样做的原因是收集在多个线程上运行的对象的连贯状态。但是,它们的代码不能更改(它们已经编译),所以我不能在其中插入互斥量、信号量等。原子操作当然是状态收集(即复制一些变量)。
最佳答案
Interlocked中有一些原子操作类,但它只提供了一些非常简单的操作。它不能用于创建完整的原子代码块。
我建议谨慎使用锁定,以确保即使上下文发生变化,您的代码仍能正常工作。
关于c# - 是否可以使一段代码原子化 (C#)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4631252/