llvm-6502/lib/Support/Windows/Threading.inc

25 lines
486 B
PHP
Raw Normal View History

#include <winbase.h>
#ifdef MemoryFence
// WinNT.h seems to define a MemoryFence macro.
#undef MemoryFence
#endif
void llvm::call_once(once_flag &flag, void (*fptr)(void)) {
while (flag != Done) {
if (flag == Wait) {
::Sleep(1);
continue;
}
sys::cas_flag old_val = sys::CompareAndSwap(&flag, Wait, Uninitialized);
if (old_val == Uninitialized) {
fptr();
sys::MemoryFence();
flag = Done;
return;
}
}
sys::MemoryFence();
}