当前位置:  开发笔记 > 编程语言 > 正文

使用sprintf和printf时的C线程安全语言环境/编码

如何解决《使用sprintf和printf时的C线程安全语言环境/编码》经验,为你挑选了0个好方法。

这个问题是不相关的,我想,此刻做一些事,但我在阅读(GNU / Linux的/ ISO-C)的文档不知道sprintf() printf()setlocale()

假设的问题:

想象一下,一个多线程的,它使用的应用程序的printf / scanf的用户面临的文本输出的家人在一个线程和printf / scanf的文件,甚至网络上的I / O 另一个线程。现在想象一个场景,该应用程序需要为不同种类的I / O 使用不同的编码/语言环境。设置语言环境/编码的方法是使用setlocale()《Linux程序员手册》中明确标记为“ MT-Unsafe”的语言环境。

ISO / IEC 9899:2018在7.11.1.1中有以下说法

对setlocale函数的调用可能会与对setlocale函数的其他调用或对受当前语言环境影响的函数的调用引起数据争用。该实现应表现为好像没有库函数调用setlocale函数一样。

据我所知,这使标准C没有处理上述情况的标准方法。(不涉及线程之间不必要的同步,否则这些线程不会不必要地进行干扰)

注意,POSIX指定了uselocale()专门为此目的的功能。但这不是嵌入式或真正的多平台代码的解决方案。

问题

是否有一种可移植的,不麻烦的方式来处理此类情况而无需诉诸自定义库

如果不是,那么可能是什么原因导致标准中忽略了这种功能

TL; DR:如何处理多线程编码(POSIX之外)?

推荐阅读
手机用户2402851155
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有