![]() |
1
12
有人是 尝试 实现基本的、咨询的、非递归的 mutex 对于这些宏(有时称为“锁”或“临界段”,但这些术语有其他含义;“互斥”是明确的)。我们的想法是编写如下代码:
然后一次只有一个执行线程可以执行该语句
在对这个问题的评论中,我说这些宏是“灾难性的错误”,“我相信你最好不要使用它们。”最重要的问题是
假设两个执行线程正试图同时获取锁。他们都会来的
没有任何东西可以阻止两个线程同时执行加载指令,从而都可以观察到要解锁的互斥锁。即使只有一个CPU,当线程1处于加载和存储之间时,也可能触发中断,从而导致上下文切换,并允许线程2在线程1执行存储之前执行加载。
为了让互斥体完成其工作,您必须以某种方式确保它是
不可能的
两个并发线程都要加载
如果编译器实现 C2011 ,然后您可以使用 atomic types ,但我不知道该怎么做,我也不会写出可能有错的东西。否则,您需要使用编译器扩展或手工编写的程序集。
第二个问题是
|
![]() |
MaPo · Linux,设置锁定ICMP_过滤器选项 3 月前 |
![]() |
Doohyeon Won · 内联函数上的奇怪现象?[关闭] 4 月前 |
![]() |
Bobby · 复合字面值总是左值吗? 4 月前 |
![]() |
9-Pin · C: 嵌套结构的堆栈内存分配 4 月前 |