C++ 多线程编程总结 在开发 C++程序时,一般在吞吐量、并发、实时性上有较高的要求
设计 C++程序时,总结起来可以从如下几点提高效率:l 并发l 异步l 缓存下面将我平常工作中遇到一些问题例举一二,其设计思想无非以上三点
1 任务队列1
1 以生产者-消费者模型设计任务队列 生产者-消费者模型是人们非常熟悉的模型,比如在某个服务器程序中,当 User 数据被逻辑模块修改后,就产生一个更新数据库的任务(produce),投递给 IO 模块任务队列,IO 模块从任务队列中取出任务执行 sql 操作(consume)
设计通用的任务队列,示例代码如下: 详细实现可参见: ffown
googlecode
/svn/trunk/fflib/include/detail/task_queue_impl
void task_queue_t::produce(const task_t& task_) { lock_guard_t lock(m_mutex); if (m_tasklist->empty()){//
条件满足唤醒等待线程 m_cond
signal(); } m_tasklist->push_back(task_); }int task_queue_t::comsume(task_t& task_){ lock_guard_t lock(m_mutex); while (m_tasklist->empty())//
当没有作业时,就等待直到条件满足被唤醒{ if (false == m_flag){ return -1; } m_cond
wait(); } task_ = m_tasklist->front(); m_tasklist->pop_front(); return 0;}1
2 任务队列使用技巧1
1 IO 与 逻辑分离 比如网络游