我正在制作一个记录器.我想创建一个log()以流作为输入的函数.
例如:
log("hello"<<" "<<"world"<<10<<"\n");
Run Code Online (Sandbox Code Playgroud)
我也希望它是线程安全的.
我重新定义了<<运算符,所以我可以这样做:
log()<<"hello"<<"world"<<10<<"\n"
Run Code Online (Sandbox Code Playgroud)
但是这个操作不是线程安全的.
如何使其线程安全?
已经log()返回该缓存在内存中所有的输出临时对象.此对象的析构函数将在表达式的末尾运行,并应在单个原子操作中将累积的数据刷新到实际流中(由您决定是否使该操作成为原子).
这将使您的第二种语法可行:
log()<<"hello"<<"world"<<10<<"\n";
Run Code Online (Sandbox Code Playgroud)