1

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

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

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

虽然我真的希望我错了。有任何想法吗?

4

0 回答 0