mutex
用法和posix的mutex一样
启动线程
中断线程
用法和posix的mutex一样
#include <iostream>
#include <boost/bind.hpp>
#include <boost/date_time/posix_time/posix_time.hpp>
#include <boost/thread.hpp>
int main()
{
boost::mutex mu;
try{
mu.lock();
std::cout<<"some operation"<<std::endl;
mu.unlock();
}
catch(std::exception& e){
std::cout << e.what() << std::endl;
mu.unlock();
}
}
lock_guard类构造时自动自动锁定互斥量,析构时自动释放互斥量,使用lock_guard类的内部类型scoped_lock
#include <iostream>
#include <boost/bind.hpp>
#include <boost/date_time/posix_time/posix_time.hpp>
#include <boost/thread.hpp>
int main()
{
boost::mutex mu;
try{
boost::mutex::scoped_lock lock(mu);
std::cout<<"some operation"<<std::endl;
}
catch(std::exception& e){
std::cout << e.what() << std::endl;
}
}
启动线程
#include <iostream>
#include <boost/bind.hpp>
#include <boost/date_time/posix_time/posix_time.hpp>
#include <boost/thread.hpp>
boost::mutex mu;
void printing(const std::string &str)
{
for(int i=0;i<10;i++)
{
boost::this_thread::sleep(boost::posix_time::seconds(1));
boost::mutex::scoped_lock lock(mu);
std::cout<<"some op"<<std::endl;
std::cout<<str<<std::endl;
}
}
int main()
{
try{
boost::thread t1(printing,"hello");
t1.join();
}
catch(std::exception& e){
std::cout << e.what() << std::endl;
mu.unlock();
}
}
中断线程
#include <iostream>
#include <boost/bind.hpp>
#include <boost/date_time/posix_time/posix_time.hpp>
#include <boost/thread.hpp>
boost::mutex mu;
void printing(const std::string &str)
{
try {
for(int i=0;i<10;i++)
{
boost::this_thread::sleep(boost::posix_time::seconds(3));
//sleep(5);
boost::mutex::scoped_lock lock(mu);
std::cout<<"some op"<<std::endl;
std::cout<<str<<std::endl;
}
} catch (boost::thread_interrupted& e) {
std::cout<<"thread_interrupted"<<std::endl;
}
}
int main()
{
try{
boost::thread t1(printing,"hello");
boost::this_thread::sleep(boost::posix_time::seconds(1));
//t1.detach();
t1.interrupt();
t1.join();
}
catch(std::exception& e){
std::cout << e.what() << std::endl;
}
}