多线程环境中输出字符串流的问题

时间:2016-05-19 11:52:02

标签: c++ multithreading

我正在实现一个需要在多线程环境中工作的记录器。

我已经实现了单例类

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();\
}

问题是这样可以正常工作,但在多线程环境中更常见,我得到的日志转储不完整,或混乱,或遗漏了一些字符。

我怀疑这可能是因为:

  1. 未刷新的输出流尝试了setbuf(stdout,NULL)
  2. 每次写入输出流后,输出字符串流容器未被清除
  3. 在多线程场景中有哪些方法可以清除上述两个疑问?

    P.S。 :使用相当老的gcc 4.4.5 :(

1 个答案:

答案 0 :(得分:0)

当我使用每个线程缓冲区时问题得到解决。

static __thread char buffer[BUFF_LEN];

但是,在多线程环境下,我仍然不确定字符串流的行为。