muduo里面有一个简单的threadpool实现,
但还是不过瘾,于是看看boost有没有更复杂的,才发现居然没有纳入,
后来google到sourceforge 里面有一个开源的,也是基于boost实现的,于是下载看看。
代码不多,但看不习惯泛型代码还是非常痛苦的。
浏览过程中发现了一个比较怪的用法(locking_ptr.hpp),
一个ptr和一个mutex封装成一个wrapper来使用,第一时间就觉得有点效率不高,
作者是这些解析的:
* The class is a wrapper for a volatile pointer. It enables synchronized access to the
* internal pointer by locking the passed mutex.
* locking_ptr is based on Andrei Alexandrescu's LockingPtr. For more information
* see article "volatile - Multithreaded Programmer's Best Friend" by A. Alexandrescu.
于是继续google了LockingPtr,才发现是有缘由的。
在多线程编程中volatile是很重要的一个关键字,
而LockingPtr的作用,也正在于此。
封装的wrapper内使用const_cast第一时间去volatile化,因为有mutex的scope lock存在。
也就是外面是volatile的,内部是非volatile的。
更多内容,建议看看《volatile - Multithreaded Programmer's Best Friend》,有翻译版本的。