我今天在Boost 线程文档中遇到了这个有趣的段落:
void wait(boost::unique_lock<boost::mutex>& lock)
...
效果:原子调用 lock.unlock() 并阻塞当前线程。当调用 this->notify_one() 或 this->notify_all() 或spuriously时,线程将解除阻塞。当线程被解除阻塞时(无论出于何种原因),在调用等待返回之前调用 lock.lock() 重新获取锁。如果函数因异常退出,还可以通过调用 lock.lock() 重新获取锁。
所以我感兴趣的是“spuriously”这个词的含义。为什么线程会因为虚假原因而被解除阻塞?可以做些什么来解决这个问题?