我正在实现一个需要在多线程环境中工作的记录器。
我已经实现了单例类
class myLog {
// Implementation
};
为了提供干净简单的界面,我提供了一些宏
#define MY_LOG_DEBUG MY_LOG(LOG_MSG, DEBUG)
static ostringstream log_msg;
#define MY_LOG(LOG_MSG, DEBUG) {\
get_lock();\
log_msg << LOG_MSG; \
myLog::getInstance().dump(log_msg, DEBUG);\
log_msg.str("");\
get_unlock();\
}
问题是这样可以正常工作,但在多线程环境中更常见,我得到的日志转储不完整,或混乱,或遗漏了一些字符。
我怀疑这可能是因为:
在多线程场景中有哪些方法可以清除上述两个疑问?
P.S。 :使用相当老的gcc 4.4.5 :(
答案 0 :(得分:0)
当我使用每个线程缓冲区时问题得到解决。
static __thread char buffer[BUFF_LEN];
但是,在多线程环境下,我仍然不确定字符串流的行为。