
Not really
I had a discussion with a professor an expert in this area, no problems when mutexes are full memory barriers and they are.
I'm not an expert, but there is no ReadRead/acquire barrier in case if table_is_ready is true. IIUC, it would be a problem if you are targeting IA-64 using non-msvc or msvc before 8.0 (2005). Could you detect and #error on such arch/compiler combinations?
Mutex acquisition and release is full memory barrier.
This mutexes are explicitly globally initialized later.
So all such things should be solved on library start.
Some compilers might not execute init::init() ctor as the do_init variable is not used. Also, could you comment your assumptions in the code?
I'm not aware of such compilers and if they exist they are probably buggy. Artyom