what is mutual exclusion 互斥

it is the requirement that one thread of execution never enter its critical section at the same time that another concurrent thread of execution enters its own critical section

不允许多线程对 critical section (可以是 share variables)的同时访问。

下面是用 linked list 的删除操作来说明。

1

两个线程同时进行删除操作,分别想删除 i 和 i+1,同时执行了

  • node(i-1)->next = node(i)->next (为了删除 node(i))
  • node(i)->next = node(i+1)->next (为了删除 node(i+1)) 最后结果就像第三行所示, node(i+1)没有被删除。

但是这之后,因为还有释放空间操作,结果就是 node(i) 和 node(i+1) 同时被 delete。所以最后最后的 list 结构变成:

  • node(i-1) ——————> unknown — node(i+2)

list 结构被破坏。

所以需要对删除 linked list 的函数,delete 加 mutex 锁。

0%