-2

我正在尝试用 C++ 为 Windows 创建一个简单的、线程安全的控制台包装器。不过,查看 API,我看不到任何用于锁定/解锁对控制台的访问的功能。对于内存,有HeapLockHeapUnlock

控制台是否存在此类功能,还是我必须创建自己的互斥锁?

编辑:

如下评论所示,控制台包装器是控制对控制台的访问。锁是必需的,这样当一个线程在控制台上执行复合操作时(例如,更改控制台颜色、写入几条消息,然后恢复颜色),其他线程将无法修改控制台或写入控制台.

4

1 回答 1

2

您应该锁定对负责记录的函数的访问。像下面的代码:

std::mutex mforlog;
void Log(std::string s) {
     std::unique_lock<mutex> lock{mforlog};
     std::cout << s << std::endl;
}

如果您的日志记录是从不同的进程完成的,则使用命名互斥锁(winapi 函数:CreateMutex)。

您还应该知道锁定日志记录可能会导致其他问题,例如某些线程会运行得更慢(等待互斥锁),这可能会导致难以发现错误。

于 2013-08-09T14:59:32.077 回答