0

我在使用互斥锁时正在考虑这个问题。

例如,如果您使用互斥锁锁定线程

m.lock();
a += b;
m.unlock();

当两个线程碰撞时会发生什么?是不是这样:

1)通过锁定线程A告诉CPU这必须不间断地执行直到解锁并且当a += b语句发生时上下文切换永远不会发生。

2) 线程 A 锁定,在执行 a += b 语句上下文切换时,线程 B 看到它被锁定,放弃控制,一切都回到 A 完成 a += b;操作和解锁访问?

如果毕竟是情况 2,有没有办法告诉 CPU 代码的某些部分永远不会被上下文切换中断?

4

2 回答 2

2

它是 2,并且没有直接的方法可以说代码必须在没有上下文切换的情况下运行完成。您可能可以通过提高线程的执行优先级来接近,但这种恶作剧通常会被不赞成并暗示设计不佳。

于 2013-01-22T18:17:43.403 回答
0

两种类型的互斥体都存在,但第一种仅用于特权程序(O/S 内核、硬件驱动程序)。只有第二种用户,否则用户程序可能会挂起整个系统。

于 2013-01-23T14:36:34.873 回答