gpt4 book ai didi

条件变量与互斥量

转载 作者:太空狗 更新时间:2023-10-29 11:16:09 25 4
gpt4 key购买 nike

有点乱!如果我们查看以下场景,问题可能是什么:我的目标是了解条件变量与互斥量的混合。

T1

  1. 锁定{互斥}
  2. 检查变量
  3. 如果未设置,则等待条件变量
  4. 解锁 {MUTEX} 转到 1

T2

  1. 修改变量;
  2. 信号条件变量

第 2 步和第 3 步之间可能存在竞争条件,因此我们使用 MUTEX。我不明白的是 cond var + mutex 的基本思想。

最佳答案

写端省略锁有两个问题:

  1. 如果您正在修改的变量不能以原子方式写入(即,它比 int 大——尽管细节取决于您使用的 CPU 架构!),您需要一个锁来确保您没有“剪”。这是当变量被中途写入时发生读取。例如,您可以将 0xAAAAAAAABBBBBBBB 写入之前为 0 的 64 位变量,而另一个线程可能只会看到 0xAAAAAAAA00000000 或 0x00000000BBBBBBBB。锁可以防止读者看到正在进行的写入,从而避免了这个问题。
  2. 读者可能会看到您的变量处于仍然需要等待的状态,然后在它进入休眠状态之前,作者可以更新变量并向条件变量发出信号。结果,您的线程将永远休眠。在写端锁定可以防止这种情况发生。

另请注意,条件变量的许多用途不仅仅是修改锁中的标志 - 例如,它们可以操纵链表或其他一些复杂的数据结构。在这种情况下,需要锁来保护该数据结构以及条件变量。

关于条件变量与互斥量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7235220/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com