在c+中,扩展现有数据结构以包含信号量或类似方法的最简单方法是什么+;? 我有一个现有的C++代码。
在c+中,扩展现有数据结构以包含信号量或类似方法的最简单方法是什么+;? 我有一个现有的C++代码。,c++,boost,mutex,semaphore,C++,Boost,Mutex,Semaphore,boost::asio::ip::address m_sender_IP_address; void Udp_comm::start_receive() { //receive UDP message m_sock_r.async_receive_from( boost::asio::buffer(m_recv_buffer), m_sender_endpoint, boost::bind(&Udp_comm::h
boost::asio::ip::address m_sender_IP_address;
void Udp_comm::start_receive()
{
//receive UDP message
m_sock_r.async_receive_from(
boost::asio::buffer(m_recv_buffer),
m_sender_endpoint,
boost::bind(&Udp_comm::handle_receive, this, boost::asio::placeholders::error,
boost::asio::placeholders::bytes_transferred));
}
void Udp_comm::handle_receive(const boost::system::error_code& error, const std::size_t bytes_transferred)
{
std::string recvd_message(m_recv_buffer.begin(), m_recv_buffer.begin() + bytes_transferred);
m_sender_IP_address = m_sender_endpoint.address();//////////wait here
//continue to listening to future messages
start_receive();
process_message(m_sender_IP_addres.to_string(), recvd_message);
}
如何保护m_发送者_IP_地址不被接收到的下一个UDP消息覆盖?我想从handle\u receive
方法的第2行到process\u message
方法的第1行锁定对该变量的访问
我也可以在不使用锁的情况下实现类似的功能吗?这里不需要信号量。您可以使用
串
来确保异步处理程序最多并发调用一次。为此,请为async\u receive\u from()回调创建一个包装处理程序
void Udp_comm::start_receive()
{
//receive UDP message
m_sock_r.async_receive_from(
boost::asio::buffer(m_recv_buffer),
m_sender_endpoint,
m_strand.wrap(
boost::bind(
&Udp_comm::handle_receive,
this,
boost::asio::placeholders::error,
boost::asio::placeholders::bytes_transferred
)
)
);
}
此处m_strand
是Udp_comm
的成员。这样做将保证只有一个线程可以变异m\u发送方\u IP\u地址
可能有用。