|
Boost Users : |
Subject: Re: [Boost-users] Is boost::asio::ip::tcp::iostream thread safe?
From: boost (boost_at_[hidden])
Date: 2012-05-10 21:44:34
----- Original Message -----From: Michael Chisholm <chisholm@mitre.org> To: boost-users@lists.boost.org On 5/10/2012 5:34 PM, Michael Chisholm wrote: > On 5/10/2012 10:38 AM, Igor R wrote: >>> hi all, >>> I use ip::tcp::iostream but I don't know if it is thread safe, and I >>> cannot find the answer in boost document. >>> I read from ip::tcp::iostream in the receiver thread, and send >>> request in another thread. >>> Now I protected the stream with a mutex. But the problem is that, if >>> I do not send request, the server will not response, >>> and the receiver will block on read with lock, and the sender cannot >>> hold the lock and cannot send the request, deadlock. >>> >>> Is there anyone know that? Please kindly give me an answer. >> >> >> As far as I can see, it's not thread-safe. >> _______________________________________________ >> Boost-users mailing list >> Boost-users@lists.boost.org >> http://lists.boost.org/mailman/listinfo.cgi/boost-users >> >> > > Definitely not. I had to create my own socket-based stream with > boost.iostreams to avoid crashes. > > Andy I should add that boost.iostreams isn't thread-safe either. But you can create different istream and ostream objects which wrap the same underlying raw socket descriptor, to get concurrent reads and writes to the socket. Andy _______________________________________________ Boost-users mailing list Boost-users@lists.boost.org http://lists.boost.org/mailman/listinfo.cgi/boost-users
Thank you all
----- Original Message -----From: Michael Chisholm <chisholm_at_[hidden]>
To: boost-users_at_[hidden]
On 5/10/2012 5:34 PM, Michael Chisholm wrote:
> On 5/10/2012 10:38 AM, Igor R wrote:
>>> hi all,
>>> I use ip::tcp::iostream but I don't know if it is thread safe, and I
>>> cannot find the answer in boost document.
>>> I read from ip::tcp::iostream in the receiver thread, and send
>>> request in another thread.
>>> Now I protected the stream with a mutex. But the problem is that, if
>>> I do not send request, the server will not response,
>>> and the receiver will block on read with lock, and the sender cannot
>>> hold the lock and cannot send the request, deadlock.
>>>
>>> Is there anyone know that? Please kindly give me an answer.
>>
>>
>> As far as I can see, it's not thread-safe.
>> _______________________________________________
>> Boost-users mailing list
>> Boost-users_at_[hidden]
>> http://lists.boost.org/mailman/listinfo.cgi/boost-users
>>
>>
>
> Definitely not. I had to create my own socket-based stream with
> boost.iostreams to avoid crashes.
>
> Andy
I should add that boost.iostreams isn't thread-safe either. But you can
create different istream and ostream objects which wrap the same
underlying raw socket descriptor, to get concurrent reads and writes to
the socket.
Andy
_______________________________________________
Boost-users mailing list
Boost-users_at_[hidden]
http://lists.boost.org/mailman/listinfo.cgi/boost-users
Boost-users list run by williamkempf at hotmail.com, kalb at libertysoft.com, bjorn.karlsson at readsoft.com, gregod at cs.rpi.edu, wekempf at cox.net