简单的可变互斥体实现有什么问题?
What is wrong with a simple variable mutex implementation?
我有这个 lock()
unlock()
互斥实现:
void lock (boolean *m) {
while (*m == true) {}
*m = true;
}
void unlock (boolean *m) {
*m = false;
}
问题是,这种做法有什么问题。除了明显的性能影响。
假设互斥量最初是 true/locked 并且线程 A 和 B 都调用了 lock
。如果在 C unlock
之后,A 和 B 在将 m
设置为 true 之前各自检查 m
,则两者都将通过锁定。
我有这个 lock()
unlock()
互斥实现:
void lock (boolean *m) {
while (*m == true) {}
*m = true;
}
void unlock (boolean *m) {
*m = false;
}
问题是,这种做法有什么问题。除了明显的性能影响。
假设互斥量最初是 true/locked 并且线程 A 和 B 都调用了 lock
。如果在 C unlock
之后,A 和 B 在将 m
设置为 true 之前各自检查 m
,则两者都将通过锁定。