多线程环境中的输出字符串流出现问题
Issue with output stringstream in multi-threaded environment
我正在实现一个需要在多线程环境中工作的记录器。
这是我作为一个单例类实现的
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();
}
问题是,这很好用,但在多线程环境中,我经常会遇到日志转储不完整、混乱或遗漏一些字符的情况。
我怀疑这可能是因为:
- 未刷新的输出流尝试setbuf(stdout,NULL)
- 每次写入输出流后,未清除输出字符串流容器
在多线程场景中,有什么方法可以消除以上两个疑虑?
附言:使用相当古老的gcc 4.4.5:(
当我使用每线程缓冲区时,问题得到了解决。
static __thread char buffer[BUFF_LEN];
然而,我仍然不确定在多线程环境下字符串流的行为。
相关文章:
- 编译包含字符串的代码时遇到问题
- setlocale的C++土耳其字符串问题
- 当我尝试添加 2 个大字符串时,我无法弄清楚出了什么问题
- 使用自定义比较函数使用std::sort()对矢量字符串进行排序时出现问题
- 我的逻辑反转字符串中的元音有什么问题?
- 按字母顺序对C++问题中的子字符串索引进行分区
- 用户输入字符串的文件附加问题..C++
- 使用 minijson-reader 库读取 JSON 字符串时出现问题
- 在将字符串放入字符串向量时遇到问题?
- 将文件复制到自定义位置,存在字符串转换问题
- 从 argv[1] 转换为字符 * 字符串后有什么问题?
- 不确定出了什么问题(字符串输入)
- 反向和计数字符串的 C++ 问题
- 反转具有返回值的字符串时出现问题
- C++字符串问题-如何访问字符串元素
- public:静态常量字符串声明/初始化问题
- 在MySql中使用字符串操作函数有什么问题
- Libwesockets.h:lws_write:C++字符串到C的转换和发送问题
- 问题:字符串在另一个字符串上写入
- 日志文件输出的问题-字符串和c_str之间的差异- c++