gpt4 book ai didi

c++ - Boost::asio::write上的互斥不起作用

转载 作者:行者123 更新时间:2023-12-02 09:51:40 25 4
gpt4 key购买 nike

我正在尝试制作一个异步tcp客户端(发送另一个请求之前,它不会等待请求的结果)。
请求方法如下所示:

std::future<void> AsyncClient::SomeRequestMethod(sometype& parameter)
{
return std::async(
std::launch::async,
[&]()
{
// Gonna send a json. ';' at the end of a json separates the requests.
const std::string requestJson = Serializer::ArraySumRequest(numbers) + ';';
boost::system::error_code err;

write(requestJson, err);
// Other stuff.
write方法调用boost::asio::write像这样:
void AsyncClient::write(const std::string& strToWrite, boost::system::error_code& err)
{
// m_writeMutex is a class member I use to synchronize writing.
std::lock_guard<std::mutex> lock(m_writeMutex);
boost::asio::write(m_socket,
boost::asio::buffer(strToWrite), err);
}
但是看起来仍然有多个线程并发写入,就像我在服务器中收到的一样:

{"Key":"Val{"Key":Value};ue"};


我该怎么办?

最佳答案

您确实将锁保护装置围绕写入asio 。如您所见,无法保证另一端将使用相同的防护程序对其进行处理。
您应该将保护放在您需要的地方,从api上的上写json jsont_rstrong:

void AsyncClient::write(const std::string& strToWrite, boost::system::error_code& err)
{
// m_writeMutex is a class member I use to synchronize writing.
// std::lock_guard<std::mutex> lock(m_writeMutex);
boost::asio::write(m_socket,
boost::asio::buffer(strToWrite), err);
}

return std::async(
std::launch::async,
[&]()
{
std::lock_guard<std::mutex> lock(m_writeMutex); // <--- here

// Gonna send a json. ';' at the end of a json separates the requests.
const std::string requestJson = Serializer::ArraySumRequest(numbers) + ';';
boost::system::error_code err;

write(requestJson, err);
// Other stuff.

关于c++ - Boost::asio::write上的互斥不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64108775/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com