Boost logo

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


Thank you all
----- 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