Tôi sử dụng boost.asio để triển khai giao tiếp mạng. Trong Main thread, tôi tạo socket TCP và kết nối máy từ xa. Sau đó bắt đầu một luồng làm việc để đọc dữ liệu từ ổ cắm. Trong Main thread, cùng socket được sử dụng để gửi dữ liệu. Điều đó có nghĩa là cùng một socket được sử dụng trong hai luồng không có mutex. Mã được dán dưới đây. Có vấn đề gì liên quan đến chức năng đọc và ghi của socket không?Chủ đề chức năng đọc và ghi ổ cắm có an toàn không?
boost::asio::io_service m_io_service;
boost::asio::ip::tcp::socket m_socket(m_io_service);
boost::thread* m_pReceiveThread;
void Receive();
void Connect()
{
boost::asio::ip::tcp::endpoint endpoint(boost::asio::ip::address::from_string("127.0.0.1"), 13);
m_socket.connect(endpoint);
m_pReceiveThread = new boost::thread(Receive);
}
void Send()
{
std::wstring strData(L"Message");
boost::system::error_code error;
const std::size_t byteSize = boost::asio::write(m_socket, boost::asio::buffer(strData), error);
}
void Receive()
{
for (;;)
{
boost::array<wchar_t, 128> buf = {0};
boost::system::error_code error;
const std::size_t byteSize = m_socket.read_some(boost::asio::buffer(buf), error);
// Dispatch the received data through event notification.
}
}
int main()
{
Connect();
while(true)
{
boost::this_thread::sleep(boost::posix_time::seconds(1));
Send();
}
return 0;
}
Gửi và nhận sử dụng bộ đệm khác nhau, vì vậy vào mức độ thấp nó có thể là okay. Tuy nhiên, lỗi được chia sẻ ở mức độ thấp, do đó tất nhiên sẽ truyền bá đến việc bạn sử dụng Boost trong các chủ đề khác nhau. –