【发布时间】:2011-06-14 16:37:18
【问题描述】:
在 XSH 2.9.1 中,wctomb 被列为不需要线程安全的函数之一。但是,相反的转换函数mbtowc 并没有出现在列表中。在具有使用移位状态的编码的实现中,两者都没有线程安全的 API,并且要求一个是线程安全的而另一个不是,这是没有意义的,而如果不禁止有状态的编码,两者都不能是线程安全的。
wcstombs(在列表中)和mbstowcs(不在列表中)也是如此。由于这两个函数都对以初始移位状态开始和结束的整个字符串进行操作,因此它们不是有状态的,它们的 API 是线程安全的,同样,将一个方向指定为线程安全但不是指定方向是没有意义的其他。
有人能解释一下吗?
【问题讨论】:
-
在您引用的链接中有一条评论可能会有所启发。 “如果传递 NULL ps 参数,wcrtomb() 和 wcsrtombs() 函数不需要是线程安全的。”我怀疑这可能会让您进一步了解。
-
@David:您正在查看名称中带有
r的函数,这与问题中的函数不同。 -
@R.. 我知道。我的观点是
wcrtomb在传递非NULL ps 时是线程安全的。大概当 ps == NULL 时 wcrtomb 等价于 wctomb。 -
@R.. 进一步推测。
wctomb不需要是线程安全的,因为如果你想要线程安全,你可以调用wcrtomb。对于mbtowc,没有r版本,因此它必须是线程安全的。所有纯粹的猜测都请注意! -
@R.. 函数通常可以通过使用内部锁实现线程安全
标签: c thread-safety posix multibyte