av_cpu_count() intends to emit a debug message containing the number of
logical cores when called the first time. The check currently works with
a static volatile int; yet this does not help at all in case of
concurrent accesses by multiple threads. So replace this with an
atomic_int.
Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@gmail.com>
int av_cpu_count(void)
{
- static volatile int printed;
+ static atomic_int printed = ATOMIC_VAR_INIT(0);
int nb_cpus = 1;
#if HAVE_WINRT
nb_cpus = sysinfo.dwNumberOfProcessors;
#endif
- if (!printed) {
+ if (!atomic_exchange_explicit(&printed, 1, memory_order_relaxed))
av_log(NULL, AV_LOG_DEBUG, "detected %d logical cores\n", nb_cpus);
- printed = 1;
- }
return nb_cpus;
}