multithreading - 在多处理器和多核系统上不可分割的操作仍然不可分割吗?

标签 multithreading thread-safety multicore multiprocessing

根据标题,还有什么限制和问题。

例如,在 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/

相关文章:

java - Android:多核设备上的显式并行代码执行?

java - 为什么使用MPJ Express的程序会出现异常?

multithreading - 芯片多处理和对称多处理之间的区别?

Java newFixedThreadpool 使前 n 个线程保持挂起状态

objective-c - UITextView 更新阻塞

spring - Hibernate Jpa-主键(序列)上的约束违反异常

ios - 更改 MPMoviePlayerController 内容不适用于 performSelectorInBackground

其他线程不可见的java实例变量

c++ - 以线程安全的方式返回指针

java - Java中的线程安全