![]() |
1
12
有人是 尝试 实现基本的、咨询的、非递归的 mutex 对于这些宏(有时称为“锁”或“临界段”,但这些术语有其他含义;“互斥”是明确的)。我们的想法是编写如下代码:
然后一次只有一个执行线程可以执行该语句
在对这个问题的评论中,我说这些宏是“灾难性的错误”,“我相信你最好不要使用它们。”最重要的问题是
假设两个执行线程正试图同时获取锁。他们都会来的
没有任何东西可以阻止两个线程同时执行加载指令,从而都可以观察到要解锁的互斥锁。即使只有一个CPU,当线程1处于加载和存储之间时,也可能触发中断,从而导致上下文切换,并允许线程2在线程1执行存储之前执行加载。
为了让互斥体完成其工作,您必须以某种方式确保它是
不可能的
两个并发线程都要加载
如果编译器实现 C2011 ,然后您可以使用 atomic types ,但我不知道该怎么做,我也不会写出可能有错的东西。否则,您需要使用编译器扩展或手工编写的程序集。
第二个问题是
|
![]() |
Community wiki · C中有哪些耗时的操作? 1 年前 |
![]() |
Community wiki · 将所有处理器电源都投入到任务中 1 年前 |
![]() |
Community wiki · C++为C添加了什么?[已关闭] 1 年前 |
![]() |
Community wiki · 打印1到1000,不带循环或条件 1 年前 |