-#if PLATFORM(DARWIN) && ENABLE(JSC_MULTIPLE_THREADS)
- pthread_once(&initializeThreadingKeyOnce, initializeThreadingOnce);
-#else
- static bool initializedThreading = false;
- if (!initializedThreading) {
- initializeThreadingOnce();
- initializedThreading = true;
- }
+ static std::once_flag initializeThreadingOnceFlag;
+
+ std::call_once(initializeThreadingOnceFlag, []{
+ WTF::double_conversion::initialize();
+ WTF::initializeThreading();
+ GlobalJSLock::initialize();
+ Options::initialize();
+ if (Options::recordGCPauseTimes())
+ HeapStatistics::initialize();
+#if ENABLE(WRITE_BARRIER_PROFILING)
+ WriteBarrierCounters::initialize();
+#endif
+#if ENABLE(ASSEMBLER)
+ ExecutableAllocator::initializeAllocator();
+#endif
+ JSStack::initializeThreading();
+ LLInt::initialize();
+#ifndef NDEBUG
+ DisallowGC::initialize();