smp下还有真正意义上的原子操作吗
以 phtread_cond_wait 为例,教材上讲,可以理解为如下几个步骤的原子操作:1 unlock mutex
2 sleep & wait for cond
3 cond ok & return
4 unlock mutex
所谓原子,指的是1->2和3->4这两部分是原子的(引自http://bbs.csdn.net/topics/370260551),目的就是防止(以1->2为例)unlock mutex和sleep之间线程被切换出去,错过条件满足的情况。
我的问题,smp下,即使线程不切换(也就是所谓原子的),就能保证逻辑正确?
我举一个反例,比如smp,多个线程微观同时运行,thread1检测到条件不满足准备sleep,thread2促使条件满足了(而且就这一次机会),岂不是thread1将因错过机会而永远等待下去?
说到底,smp下还有所谓原子操作吗?教材上对cond_wait的原子性描述意义何在? 条件满足了就应该将tread1唤 醒吧。。 原子操作的目的不是为了防止错过执行条件吧, 我记得应该是为了防止死锁.
另外, 楼主说的后一个问题, 进程的调试机制中, 就有算法避免进程 饥饿的吧 . 原子操作就是为了防止多个线程同时对同一块内存的操作,经典的就是自旋锁了。
页:
[1]