做网络编程的话,经常会听到什么epoll(linux下)、kqueue(bsd和苹果下)、io完成端口(windows下)这样的名词,也许看了网上的资料也知道用法是什么样的,但是却对为什么这样做没有很感性的认识。我在尝试设计一个实验能够从线程调度的角度来对这个事情有直观认识,现在勉强也能算是搞出来了,所以写一篇讲讲是做了什么。
分类目录归档:多线程
条件变量的伪唤醒
起因是这样的,C++的新标准库添加了多线程的支持,有线程和线程同步的实现。我自己是做Windows开发比较多,自然用过Event这样的线程同步对象。但是这个东西,在C++的标准库里面没有。我想到说它有一个“条件变量”,而这个“条件变量”是有一个wait / signal 功能的,这个类看起来能实现 Event 的一部分功能。但是在前几天,有个同事说条件变量的 wait 会在没有被 signal 的时候也自己唤醒。毕竟平时不做 posix 那样系统下面的开发,所以这样的事情没有听说过。那会儿其实我是不信的,但是用关键字“condition variable fake wake”在网上搜了一下以后,看到确实是有这样的事情,然后英语中也不是叫 fake,管它叫 spurious wakeup。