Boo*_*ean 2 multithreading synchronization mutex semaphore
我读到,互斥锁和信号量维护一个等待进程列表,并在当前线程完成关键部分时将其唤醒.互斥体和信号量如何做到这一点?它们不会干扰流程调度程序决策吗?
等待和唤醒通常与调度器合作完成.强制特定的一个等待线程被唤醒的互斥实现通常被认为是一个糟糕的实现.
相反,互斥锁或信号量将通知调度程序线程正在等待,从而将其从"准备运行"列表中取出.然后,当互斥锁解锁或信号量发出信号时,实现将执行
要求调度程序根据调度程序的判断唤醒其中一个等待线程,或者
通知调度程序所有等待的线程都准备好运行,然后在等待的线程上有逻辑,以便调度程序唤醒除第一个之外的所有线程再次返回休眠状态.
前者是首选的实现选择,但并不总是可用.第二种方法通常被称为"雷鸣般的群体"方法:如果有1000个线程在等待,那么所有1000个线程都被唤醒(一个大的雷鸣般的线程群),只有999才能重新入睡.这浪费了CPU资源,并且实现将尽可能避免它.