最近在公司负责一个线程池的模块,里面用到了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标准库中的。