#pragma once
#include <boost/bind.hpp>
#include <boost/thread.hpp>
#include <boost/asio.hpp>
namespace Strand
{
using namespace boost::asio;
boost::mutex mutex;
void io_run(const boost::shared_ptr<io_service>& io)
{
mutex.lock();
std :: cout << "[" << boost::this_thread::get_id() << "] Thread Start" << std::endl ;
mutex.unlock();
io->run();
mutex.lock();
std :: cout << "[" << boost::this_thread::get_id() << "] Thread End" << std::endl ;
mutex.unlock();
}
void print_num(int x)
{
mutex.lock();
std :: cout << "[" << boost::this_thread::get_id() << "] x: " << x << std::endl ;
mutex.unlock();
}
/*
*我们知道在多条thread的程式设计中,对于执行的结果我们是无法预期的。虽然使用mutex可以保证thread-safety,
*但却无法保证工作能够照我们所期望的顺序执行。
*在boost ASIO中提供了strand来解决既能保证thread-safety又能够让工作的顺序能够依照post
boost::asio学习之[二]boost::asio::strand
最新推荐文章于 2024-06-20 14:10:26 发布
本文通过示例介绍了Boost.ASIO库中的strand如何确保线程安全并保持执行顺序,展示了在多线程环境中如何使用strand来协调并发任务的执行。
摘要由CSDN通过智能技术生成