我的程序,从命令行执行,看起来像这样(执行命令在其他地方声明):
int commandHandler::handleRequest(...)
{
bool cmdresult = execute(output);
if cmdresult
{
std::cout << output << std::endl;
}
}
问题: 如果你用^ C将正在进行的输出分解为cout,那么另一个对程序的调用将在输出到cout时崩溃,因为&#34; cout被锁定但是所有者已经死了&#34;。 如何以最简单的方式防止这种情况?在尝试将输出重定向到该流之前是否有任何方法可以检查cout是否已被锁定,在这种情况下,解锁它?
如果我做这样的测试程序:
int main(void)
{
std::string output = "Superlongstringwouldbeprinted here... ";
for(int i=0;i<40000;i++)
{
output.append("Superlongstringwouldbeprinted here... ");
}
std::cout << output << std::endl;
}
标准&#34;环境,输出可以用^ C打破,我能够再次运行程序输出到std :: cout。也就是说,似乎std :: cout的方向实现在我编写代码的实时操作系统中存在缺陷?
答案 0 :(得分:-3)
如果您使用的是C ++ 11,则可以使用
std::mutex::lock()
std::mutex::try_lock()
std::mutex::unlock()
功能。
但是,您不是很幸运,您可以使用平台/库相关代码
在Linux中,您可以使用POSIX互斥锁。
使用范围锁的另一个好主意。