
Hello Steven, Monday, February 5, 2007, 9:53:35 PM, you wrote:
AMDG
Andrey Semashev <andysem <at> mail.ru> writes:
Yes, you're right here. But there's nothing really dangerous in running state_dispatcher constructor more than once concurrently. I'll see what I can do about it, just to be on the safe side.
This has exactly the same problem that m_StatesInfo had. It can be used before it is initialized.
Yes, again you're right. I'm just not very experienced in multithreaded programming. I made the dispatcher instance a static class data member so it should be initialized even before any FSM get created (I've attached the modified file). But thinking of it some more I'm not quite sure even this would make me absolutely safe. The Standard says (3.6.2/3) that non-local objects with static storage duration (which the dispatcher and, BTW, state names are) are dynamically initialized before any function or object usage in the translation unit where the objects are defined. Doesn't that mean that there's a possibility that one day more than one thread may concurrently execute this initialization by accessing a function or object in the TU? If so, then I can hardly imagine the absolutely safe way to protect the initialization of such global objects. I wouldn't even be able to safely create a mutex fearing that it would be simultaneously initialized by several threads. Is there any way to solve this? -- Best regards, Andrey mailto:andysem@mail.ru