【发布时间】:2012-08-14 11:12:06
【问题描述】:
我有以下代码:
while(lock)
;
lock = 1;
// critical section
lock = 0;
因为读取或更改锁值本身就是一条多指令
read lock
change value
write it
如果发生这样的情况:
1) One thread reads the lock and stops there
2) Another thread reads it and sees it is free; lock it and do something untill half
3) First thread wakes up and goes into CS
那么如何在系统中实现锁定? 将变量放在另一个变量之上是不对的:就像守卫一样?
停止其他处理器线程也不对吗?
【问题讨论】:
-
哪个算法,你有这个代码???
-
"读取或更改锁定值本身就是一条多指令" - 并非总是如此。原子操作由多种架构提供。锁定实现会使用这些,具体取决于硬件。
-
该操作(指令)的原子性是如何实现的?
-
它是 impl。通过硬件,如果您真的想了解更多信息,可以查找 MESI 协议之类的东西(尽管它并不暗示原子操作本身)。 @David 的回答足以让您入门,
标签: multithreading locks