繁体   English   中英

请解释区域设置中对互斥锁的需求

[英]Explain the Need for Mutexes in Locales, Please

阅读问题为什么C ++ STL不支持atoi(con​​st string&)函数? ,我遇到一条评论警告GCC(至少)有一个错误 ,可以减慢频繁使用ostringstream的多线程应用程序。 这显然是由于C ++语言环境机制需要的互斥量。

鉴于我最近对全球化实践感兴趣 ,我想知道是否有人可以向我解释为什么语言环境对象需要互斥锁? 在需要互斥锁的区域设置中可以更改的是什么? 它不应该是一个只读设施吗?

这确实是一个实现问题,但是std::locale有一个静态函数,可以检索和设置'全局'语言环境。 全局语言环境定义为在标准库的几个区域中使用,这意味着某处必须存在全局语言环境。

在支持线程的实现中,很可能需要通过某种锁定机制来保护此全局区域设置,以防止线程之间的同时访问导致不期望的行为。

由于当前标准根本没有明确地处理线程,因此它是关于如何(或者如果)实现此锁定机制以及是否需要其他共享数据和锁的集合实现选择。

答案可能是懒惰的初始化。 语言环境系统背后有很多数据,很容易犯错误编码序列:

  1. 拿锁
  2. 检查初始化
  3. 如果需要,读取数据
  4. 解锁

那就是你。

我们中的一些人不相信整个iostream机制,只要我们可以从线程性能的角度抛出它。 自1987年以来,它已经充满了不必要的锁,无法声明单个流只能在单个线程中使用。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM