mirror of
https://github.com/devkitPro/wut.git
synced 2026-03-27 12:25:08 -05:00
24 lines
629 B
C++
24 lines
629 B
C++
#include "wut_gthread.h"
|
|
|
|
int
|
|
__wut_once(__wut_once_t *once,
|
|
void (*func) (void))
|
|
{
|
|
uint32_t value = 0;
|
|
|
|
if (OSCompareAndSwapAtomicEx(once,
|
|
__WUT_ONCE_VALUE_INIT,
|
|
__WUT_ONCE_VALUE_STARTED,
|
|
&value)) {
|
|
func();
|
|
OSSwapAtomic(once,
|
|
__WUT_ONCE_VALUE_DONE);
|
|
} else if (value != __WUT_ONCE_VALUE_DONE) {
|
|
while (!OSCompareAndSwapAtomic(once,
|
|
__WUT_ONCE_VALUE_DONE,
|
|
__WUT_ONCE_VALUE_DONE));
|
|
}
|
|
|
|
return 0;
|
|
}
|