gpt4 book ai didi

multithreading - 互斥量或信号量如何唤醒进程?

转载 作者:行者123 更新时间:2023-12-01 10:11:03 26 4
gpt4 key购买 nike

我读到互斥体和信号量维护一个等待进程列表,并在当前线程完成临界区时将它们唤醒。互斥体和信号量如何做到这一点?它们不会干扰流程调度程序的决策吗?

最佳答案

等待和唤醒通常完成 合作中与调度程序。强制一个特定的等待线程唤醒的互斥体实现通常被认为是一个糟糕的实现。

相反,互斥体或信号量将通知调度程序一个线程正在等待,从而将其从“准备运行”列表中删除。然后,当互斥锁被解锁或信号量发出信号时,实现将要么

  • 要求调度程序根据调度程序的判断唤醒等待线程之一,或
  • 通知调度程序所有等待线程都准备好运行,然后在等待线程上设置逻辑,以便除第一个被调度程序唤醒的线程之外的所有线程再次返回 sleep 状态。

  • 前者是首选的实现选择,但并不总是可用。第二种通常被称为“雷鸣般的群”方法:如果有 1000 个线程在等待,则所有 1000 个线程都被唤醒(一大群雷鸣般的线程),只有 999 个线程返回休眠状态。这会浪费 CPU 资源,并且实现将在可能的情况下避免它。

    关于multithreading - 互斥量或信号量如何唤醒进程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4953478/

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