网站缩写的英文,网站怎么做文本跳出来,wordpress通知公告,php html5企业网站源码当线程从等待已发出信号的条件变量中醒来#xff0c;却发现它等待的条件不满足时#xff0c;就会发生虚假唤醒。之所以称为虚假#xff0c;是因为该线程似乎无缘无故地被唤醒了。但是虚假唤醒不会无缘无故发生#xff1a;它们通常是因为在发出条件变量信号和等待线程最终运…当线程从等待已发出信号的条件变量中醒来却发现它等待的条件不满足时就会发生虚假唤醒。之所以称为虚假是因为该线程似乎无缘无故地被唤醒了。但是虚假唤醒不会无缘无故发生它们通常是因为在发出条件变量信号和等待线程最终运行之间另一个线程运行并更改了条件。线程之间存在竞争条件典型的结果是有时在条件变量上唤醒的线程首先运行赢得竞争有时它运行第二失去竞争。 在许多系统上尤其是多处理器系统上虚假唤醒的问题更加严重因为如果有多个线程在发出信号时等待条件变量系统可能会决定将它们全部唤醒将每个signal( )唤醒一个线程视为broadcast( )唤醒所有这些从而打破了信号和唤醒之间任何可能预期的 1:1 关系。如果有 10 个线程在等待那么只有一个会获胜另外 9 个会经历虚假唤醒。 为了让实现在处理操作系统内部的错误条件和竞争时具有灵活性即使没有发出信号也可以允许条件变量从等待中返回尽管目前尚不清楚有多少实现实际这样做。在条件变量的 Solaris 实现中如果进程发出信号则可能会发生虚假唤醒而没有发出条件信号等待系统调用中止并返回EINTR。条件变量的 Linux pthread 实现保证它不会那样做。 因为只要有竞争甚至可能在没有竞争或信号的情况下都可能发生虚假唤醒因此当线程在条件变量上唤醒时它应该始终检查它所寻求的条件是否得到满足。如果不是它应该回到条件变量上睡觉等待另一个机会。