好的,所以我正在阅读有关同步的内容,并阅读了各种算法,例如自旋锁、信号量和互斥锁,以避免竞争条件。
但是,当多个进程同时访问数据时,这些算法无法防止 SMP 中的竞争条件。
例如,假设处理器 A 中的线程 1 运行 lock(mutex1); 撤回(1000);解锁(互斥体1);
处理器 B 中的线程 2 运行 lock(mutex1);存款(1000);存款(1000);解锁(互斥体1);
当两个线程完全在同一时间运行时,两个线程将同时处于临界区。
唯一的解决方案(应该在硬件级别)是使每个处理器彼此稍微偏离运行,但这违背了并行性的目的。
是否有任何硬件级别的支持来避免多个处理器尝试同时获取锁的情况?
(这不是原子性问题,而是精确并行性问题,我想知道 SMP 是如何处理它的)。