读取在没有同步的情况下同时递增的int是否安全

Per*_*cee 0 c++ multithreading integer

我有线程A只读取int,线程B只增加它.

我不需要线程A在值上完全是最新的,当它实际上是9时它可以是8,它没关系,因为它是一个循环并且他将在某个时刻达到9.

问题是我有一个固定大小的数组,一个存储当前索引的int(由线程A读取的最后一个安置)和另一个存储数组"大小"的int.int从0开始,每个更新线程A查看大小int是否大于索引int,如果是,它会捕获并读取新值.

我想知道我是否可以避免同步,因为我不需要精确的准确性.

Pet*_*ker 6

不.行为未定义.充其量,你的"不需要精确的准确性"变成"可以容忍无意义的价值观".

假设一个线程刚刚在字节边界上增加了一个值.例如,在具有8位字节的系统上从255到256.在递增之前,高字节的值为0.增量后,低字节的值为0.读取值0是否可以接受?因为这是您可以看到的:在写入低字节之后和写入新字节之前的线程切换将导致另一个线程将两个字节都视为零.

注意这是一个手工操作的参数,旨在让您了解同步解决的各种问题.它并不打算提出良好的做法.好的做法需要同步,无论你猜怎么结果都可能没有它.