根据标题,还有什么限制和问题。
例如,在 x86 处理器上,大多数数据类型的对齐是可选的 - 优化而不是要求。这意味着指针可能存储在未对齐的地址,这反过来意味着指针可能会在缓存页面边界上拆分。
显然,如果您在任何处理器上工作足够努力(挑选特定字节等),这可以完成,但不是以您仍然希望写入操作不可分割的方式完成。
我严重怀疑多核处理器能否确保其他内核在这种未对齐的跨页边界写入情况下保证写入指针的前后 View 一致。
我对吗?有没有我没有想到的类似问题?
最佳答案
对所有线程可见的单个内存的概念不再适用于具有单独缓存的多个内核。 StackOverflow questions on memory barriers可能有兴趣;比如说,this one .
我认为一个说明“单内存”模型问题的例子是这样的:
最初,x = y = 0。
主题 1:
X = x;
y = 1;
主题 2:
Y = y;
x = 1;
当然,存在竞争条件。除了明显的竞争条件之外的第二个问题是一种可能的结果是 X=1, Y=1。即使没有编译器优化(即使你在汇编中编写了上述两个线程)。
关于multithreading - 在多处理器和多核系统上不可分割的操作仍然不可分割吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2383270/