对于以线程安全的方式修改字节长度变量,是否必须加LOCK前缀?

时间:2018-09-05 22:03:22

标签: multithreading locking windows64

为简单起见,假设我们有8个线程和8个字节长的字节数组。每个线程都从该数组分配了一个字节-也就是说,线程可以自由修改分配的字节,而数组中的其他字节则不能修改。

我们还假设数组在8个字节的边界上对齐。

乍一看,让线程修改其(并且仅修改)它们的字节(<任意>任意字节)是线程安全的,因为这里实际上没有共享数据。但是,据我了解,当前所有运行64位Windows的Intel和AMD处理器一次只能读写至少8个字节(64位)。所以我想,当从8个字节的对齐块中仅修改1个字节时,CPU读取所有8个字节,修改有问题的字节,并将1个修改后的字节与7个未修改的字节一起写回。除了线程安全,这就是所有内容,因此我怀疑直接写入这些字节时需要LOCK前缀。

尽管我真的希望我错了。 有什么想法吗?

0 个答案:

没有答案