boost库在工作(16)线程之一
http://blog.youkuaiyun.com/caimouse/article/details/8714152
boost::thread(boost::bind(Run, 1));
boost库在工作(17)线程之二
http://blog.youkuaiyun.com/caimouse/article/details/8741295
boost::thread_group
主要使用了boost库里的线程池类thread_group,它提供了多个线程创建、保存、退出等管理。比如使用create_thread函数可以创建多个线程,每个线程都调用函数Run运行。使用join_all函数来确保所有线程运行,都从线程运行函数里退出来,如果其中一个线程没有办法退出,那么就会一直等待的。
boost库在工作(18)线程之三 死锁
http://blog.youkuaiyun.com/caimouse/article/details/8742324
static boost::mutex mutexCout; //boost::mutex锁
boost::lock_guard<boost::mutex> autoLock(mutexCout);
类boost::lock_guard,这个类是一个自动锁的类,所谓的自动锁,就是在构造函数里调用上锁函数,在析造函数里调用解锁函数,这样在这个类boost::lock_guard声明的对象的生命周期内,都可以防止别的线程来访问锁住的相关代码。
本例中由共用同一个全局锁g_mutexAll,并且在第一个函数里添加了自动锁,也在第二个函数里添加自动锁,同时再调用第一个函数,结果在第二个函数就形成了递归调用的关系,导致死锁发生。
boost库在工作(19)线程之四 防止死锁
http://blog.youkuaiyun.com/caimouse/article/details/8797771
在boost库里提供同一个函数递归调用时使用的锁boost::recursive_mutex,当同一个线程调用时,碰到相同已经上锁的锁时,还可以继续往下执行。这时就不用担心同一个线程调用不同的函数时造成死锁了。
boost库在工作(20)线程之五
http://blog.youkuaiyun.com/caimouse/article/details/8831773
让线程运行类里的成员函数
m_threadGroup.create_thread(boost::bind(&CThreadBase::Run, this,i));