网站制作报价/九江seo公司
多个线程访问同一资源时,为了保证数据的一致性,最简单的方式就是使用 mutex(互斥锁)。
(1).直接操作 mutex,即直接调用 mutex 的 lock / unlock 函数。此例顺带使用了 boost::thread_group 来创建一组线程。
#include <iostream>
#include <boost/thread/mutex.hpp>
#include <boost/thread/thread.hpp>boost::mutex mutex;
int count = 0;void Counter() {mutex.lock();int i = ++count;std::cout << "count == " << i << std::endl;// 前面代码如有异常,unlock 就调不到了。mutex.unlock();
}int main() {// 创建一组线程。boost::thread_group threads;for (int i = 0; i < 4; ++i) {threads.create_thread(&Counter);}// 等待所有线程结束。threads.join_all();return 0;
}
(2).使用 lock_guard 自动加锁、解锁。原理是 RAII,和智能指针类似
#include <iostream>
#include <boost/thread/lock_guard.hpp>
#include <boost/thread/mutex.