|
Boost Users : |
Subject: [Boost-users] [boost][thread] synchronization fails - why?
From: Alexander Heinrich (alexander.tobias.heinrich_at_[hidden])
Date: 2009-08-20 08:12:43
Hi,
I've written a small logging class which I use for debugging in a
multithreaded environment. I.e. different concurrent (boost) threads may
instantiate an object of class logmsg, which amongst other things writes
some message to the console. To synchronize the output I lock a global mutex
whenever the logmsg constructor is invoked. Unfortunately it simply doesn't
work. I still end up with output from different threads being mixed up
almost as if there was no synchronization. I write 'almost' because if I
remove the locking it's actually getting worse (crazy, huh). I added the
code for allocating the console (it's an MFC project), because I believe it
could have something to do with it, since the console itself is running in a
separate (non-boost) thread.
--- FILE* pConsole; boost::mutex consoleMutex; class logmsg { public: logmsg(const void* source, const char* msg, ...); }; logmsg::logmsg(const void* source, const char* msg, ...) { boost::mutex::scoped_lock lock(consoleMutex); if (!pConsole) create_console(); cout << msg << endl; } void create_console() { AllocConsole(); int hConsole = _open_osfhandle( (long)GetStdHandle(STD_OUTPUT_HANDLE), _O_TEXT ); pConsole = _fdopen(hConsole, "w"); setvbuf(pConsole, NULL, _IONBF, 0); //disables buffering *stdout = *pConsole; } --- Best regards, Alex
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