gpt4 book ai didi

multithreading - 条件变量 : used only to simulate monitors?

转载 作者:行者123 更新时间:2023-12-03 12:53:07 24 4
gpt4 key购买 nike

我正在阅读 Gregory Andrews 的“多线程、并行和分布式编程”,作者在本书中提到他将展示如何“结合条件变量来模拟监视器”使用锁。
我还多次听说“互斥锁 + 条件变量”是使用 Posix 线程的程序中的常见模式。

所以我的问题是:除此之外还有其他常见的条件变量用法(将它们与锁结合使用来模拟监视器”?如果是这样,一个简单的用法示例是什么?

最佳答案

监视器可以实现两种不同的功能:

  • 互斥 - 在任何给定时间至多一个线程可以拥有监视器
  • 合作 - 拥有监视器的线程可以选择等待,直到它被协作线程通过监视器发送的通知唤醒

  • Posix 线程库将这两个关注点分成两个不同的对象:
  • 互斥是使用互斥锁实现的
  • 使用条件变量
  • 完成合作

    假设合作是关于线程之间共享的一些状态。这种状态预计会受到互斥体的保护。因此,基本的等待操作有两个参数:
  • 等待
  • 上的通知(信号)的条件变量
  • 保护共享状态的互斥锁

  • 当线程使用互斥锁等待条件变量时,互斥锁被释放,线程进入休眠状态。当线程唤醒时,它会在继续之前重新获取互斥锁。

    信号(通知一个线程)或广播(通知所有线程)条件变量不需要互斥体。

    条件变量仅用于此用途。通过使用从不发出信号的私有(private)条件变量和定时等待( pthread_cond_timedwait()),可以将它们用作“ sleep 一段时间并在 sleep 时释放此互斥锁”命令。

    关于multithreading - 条件变量 : used only to simulate monitors?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4167103/

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