Boost logo

Boost Users :

Subject: Re: [Boost-users] boost::mutex over a socket
From: Kulti (kultihell_at_[hidden])
Date: 2011-03-14 12:44:02


On Mon, Mar 14, 2011 at 4:24 PM, Marco Piacentini
<marcopiacenta_at_[hidden]> wrote:
> Ok...I've done something like this:
>
> void executeThread()
> {
>   m_mutex.lock();
>   length=boost::asio::read(socket_,boost::asio::buffer(msg,sizeof(msg)),
> ec);
>   m_mutex.unlock();
>
>   m_mutex.lock();
>  boost::asio::write(socket_,boost::asio::buffer(msgToSend,sizeof(msgToSend)));
>   m_mutex.unlock();
> }
>
>
> and I call two thread inside a member's function Server Class:
>
> void handle_accept()
> {
>     ....
>     ....
>
>   if(fork()==0)
>  {
>         boost::thread thread_read(&server::executeThread,this);
>         boost::thread thread_write(&server::executeThread,this);
>         thread_read.join();
>         thread_write.join();
>  }
>  else
> {
>         ....
>         ....
> }
>
> }
>
> Can I obtain in this way a thread that read and the other that write?
> and to obtain a ciclyc behaviour, where I have to put the for(;;)?thanks..
>
>
>
> ________________________________
> Da: Kulti <kultihell_at_[hidden]>
> A: boost-users_at_[hidden]
> Inviato: Lun 14 marzo 2011, 16:59:39
> Oggetto: Re: [Boost-users] boost::mutex over a socket
>
> On Mon, Mar 14, 2011 at 3:28 PM, Marco Piacentini
> <marcopiacenta_at_[hidden]> wrote:
>> Hi guys...I've 2 thread and I would like that one of these performs a
>> synchronous read, menawhile the other performs a synchrounous write...adn
>> obviously they share the same socket.....the signature of the functions
>> are
>> the following:
>>
>> length=boost::asio::read(socket_,boost::asio::buffer(msg,sizeof(msg)),
>> ec);
>>
>>
>> boost::asio::write(socket_,boost::asio::buffer(msgToSend,sizeof(msgToSend)));
>>
>> socket_ is a private field of the classe Server.
>>
>> How can I use the mutex to perform concurrently and safetly these
>> operations?
>>
>> Thanks..
>>
>>
>>
>> _______________________________________________
>> Boost-users mailing list
>> Boost-users_at_[hidden]
>> http://lists.boost.org/mailman/listinfo.cgi/boost-users
>>
>
> The typical usage of mutex:
> 1. Add boost::mutex mutex_ as private field of class Server
> 2. When you read/write just add mutex_.lock() before and
> mutex_.unlock() after. Also you can use boost::mutex::scoped_lock if
> it's convenient.
> _______________________________________________
> Boost-users mailing list
> Boost-users_at_[hidden]
> http://lists.boost.org/mailman/listinfo.cgi/boost-users
>
>
> _______________________________________________
> Boost-users mailing list
> Boost-users_at_[hidden]
> http://lists.boost.org/mailman/listinfo.cgi/boost-users
>

At first, I cannot understand why you try to use one handler for
different threads? If you wanna get two threads (one for read and one
for write) you need two different handlers.

At second, If you do fork - you get two processes, which cannot share
mutex. If you need to interprocess synchronization you should use
other mechanisms, e.g. lock-file.


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