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


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
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

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


Boost-users list run by williamkempf at, kalb at, bjorn.karlsson at, gregod at, wekempf at