最近在公司负责一个线程池的模块,里面用到了boost库中的mutex、condition_variable与mutex::scoped_lock,在此总结下线程池在使用时的方式和要点,这里记录了线程之间的通信方式,希望对学习线程之间(同一个进程)通信的同志们有所帮助。
线程之间(在同一个进程)的通信方式:信号量;mutex,条件变量和读写锁。
class Condition {public:Condition() : count(0) { }virtual ~Condition() { }void Increase() {boost::mutex::scoped_lock lock(mutex);++ count;}void Decrease() {boost::mutex::scoped_lock lock(mutex);-- count;cond.notify_all(); //通知所有的线程}void Wait() {boost::mutex::scoped_lock lock(mutex);while (count > 0) {cond.wait(lock);}}private:boost::condition_variable cond; //条件变量boost::mutex mutex;int32_t count;};
如果没有boost库,可以使用std::mutex, std::condition_variable代替,本人建议使用std标准库中的。