简单的可变互斥体实现有什么问题?

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,则两者都将通过锁定。