, . , " " - " odr". , , , , ( , - - ), , ), , , .
:
#include <stdio.h>
#include <chrono>
#include <functional>
#include <thread>
#include <string>
using std::string;
enum class trace_level { none, error, warning, log, debug, verbose };
trace_level log_level = trace_level::log;
static thread_local trace_level min_level = log_level;
void f(string const& s)
{
printf("%s, min_level == %d\n", s.c_str(), (int) min_level);
}
int main()
{
std::thread t1{std::bind(f,"thread 1")};
log_level = trace_level::verbose;
std::thread t2{std::bind(f,"thread 2")};
t1.join();
t2.join();
}
sleep_for() , , ():
C:\so-test>test
thread 1, min_level == 5
thread 2, min_level == 5
, sleep_for() , ( - ):
C:\so-test>test
thread 1, min_level == 3
thread 2, min_level == 5
, , , , , , , .
- . log_level, undefined. , , , . log_level :
std::atomic<trace_level> log_level(trace_level::log);
:
3.6.2 [basic.start.init]
... ....
3.7.2/2 [basic.stc.thread]
odr (3.2) , , .