Re: [reSIProcate] [reSIProcate-commit] resiprocate 8871 sgodin: -fixed potential multi-threading issues with static member variable initialization
Wow. Did quick test under gcc4&linux, and same behavior. I didn't realize there was a run-time cost (plus thread risk) to static function variable initializers.
Thanks,
Kennard
On Wed, Dec 1, 2010 at 10:18 AM, Scott Godin
<sgodin@xxxxxxxxxxxxxxx> wrote:
Hi Kennard,
Static member variables are constructed the first time the function is called. If multiple threads call a particular member function (that contains a static variable) for the first time at the exact same time (ie. thread preempts in the middle of object construction), then both threads can end up trying to construct the same static object. I was seeing this behaviour under Visual Studio 2008, it possible that this problem does not exist on other compilers. Moving the static variables outside of the member function causes them to be created when the application is initialized, thus avoiding this race.
Scott
Hi Scott,
There is some intricacy of C++ that I don't understand. Could you explain the thread safety issue below? Is there a difference in when the constructors/destructors are called?
Thanks,
Kennard
+static const Data errorContextData("Contents");
const Data&
Contents::errorContext() const
{
- static const Data context("Contents");
- return context;
+ return errorContextData;
}
_______________________________________________
resiprocate-devel mailing list
resiprocate-devel@xxxxxxxxxxxxxxx
https://list.resiprocate.org/mailman/listinfo/resiprocate-devel