2012-04-05 16 views
5

Używam boost.asio do realizacji komunikacji sieciowej. W głównym wątku tworzę gniazdo TCP i podłączam komputer zdalny. Następnie uruchom działający wątek, aby odczytać dane z gniazda. W głównym wątku używa się tego samego gniazda do wysyłania danych. Oznacza to, że to samo gniazdo jest używane w dwóch wątkach bez muteksu. Kod jest wklejony poniżej. Czy jest jakiś problem dotyczący funkcji odczytu i zapisu gniazda?Czy wątki do ładowania i odczytu funkcji ładowania są bezpieczne?

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; 
} 
+2

wysyłanie i odbieranie wykorzystuje różne bufory, tak na niskim poziomie, to może być w porządku. Jednak błędy są dzielone na niskim poziomie, więc oczywiście będą się rozprzestrzeniać do wykorzystania Boost w różnych wątkach. –

Odpowiedz