Boost logo

Boost Users :

Subject: [Boost-users] [Boost.Thread] Multithreaded Multithreaded Server
From: Ian Mallett (geometrian_at_[hidden])
Date: 2011-04-10 13:57:22


Hi,

Fairly new to Boost. Bear with me.

I'm trying to write a multithreaded multithreaded server (two multithreaded
operations): ideally, there should be a single process, containing at least
two threads. The first thread handles various tasks (and can start other
threads to help it as well). The other thread waits for incoming
connections, and adds a new thread for each one:

Server process:
    -Thread 1 (Handle background server operations, etc.)
        -helper thread 1
        -helper thread 2
        ...
        -helper thread *n*
    -Thread 2 (Listen for incoming connections. When found, make a new
connection thread to handle it)
        -connection thread 1
        -connection thread 2
        ...
        -connection thread *n*

I began by making heavy use of the example
here<http://www.boost.org/doc/libs/1_36_0/doc/html/boost_asio/example/echo/async_tcp_echo_server.cpp>.
Please see my attached files for my implementation. The classes
"mMindThreadServerListener" and "mMindServerHandlerClient" correspond to
"server" and "session", respectively.

"mMindServer" is the highest level (server process). In it, there's a
thread group that contains "Thread 1" ("_thread_connection_pruner", which
kills unused connections, and represents a background server operation) and
"Thread 2" ("_thread_listener", which listens for incoming connections).

Thread 2's need to make other threads seems to be handled by
boost::asio::io_service.

Unfortunately, when a connection is found, Thread 1 stops. I can only
attribute this to a lock boost::asio::io_service puts, although I have no
idea. Can someone explain what's going on, and possibly a better way to do
this?

Thanks,
Ian






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