sách gpt4 ăn đã đi

c# - 一个原子操作就够了吗

In lại 作者:太空狗 更新时间:2023-10-29 20:12:12 24 4
mua khóa gpt4 giày nike

class StopIt
{
private bool stop;

void Loop()
{
while (!stop)
{
// work
}
}

void Stop()
{
stop = true;
}
}

基本上,如果 Loop 方法在一个线程中运行并且从另一个线程调用 Stop 操作是否会正确停止?我知道 bool 读/写是原子的。但是,这就够了吗?如果线程循环没有立即停止,就会有麻烦。我应该将停止标记为 volatile 吗?

câu trả lời hay nhất

是的,您绝对应该将 dừng lại 标记为 volatile。

原子性是不够的 - 它不能保证一个线程将永远“看到”另一个线程所做的更改。

虽然我对 bay hơi 的理解目前正在接受一些手术,但您可以粗略地将写入 volatile 变量视为“确保其他人可以立即看到它!”并从 volatile 变量中读取为“我想查看最新值!”

如果不使 dừng lại 变易变,即使在不同的线程中调用 Dừng lại() ,该循环也可能永远持续下去。基本上,JIT 可以非常合理地将变量读入寄存器,然后永远从寄存器中读取。

事实上,如果“工作”涉及调用非内联方法,我相信 JIT 目前无论如何都被迫进行 volatile 读取,但这只是当前的实际限制......理论 说你应该让它变得不稳定。

关于c# - 一个原子操作就够了吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1174120/

24 4 0
Chứng chỉ ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com
Xem sitemap của VNExpress