【问题标题】:Is freebsd C crypt() threadsafe?freebsd C crypt() 线程安全吗?
【发布时间】:2016-09-02 18:20:51
【问题描述】:

当我阅读时

错误

 The crypt() function returns a pointer to static data, and subsequent
 calls to crypt() will modify the same data.  Likewise, crypt_set_format()
 modifies static data.

来自:http://www.freebsd.org/cgi/man.cgi?query=crypt&sektion=3

我很害怕每次我打电话给crypt() 时我都必须锁定,但在这个来源 (http://pubs.opengroup.org/onlinepubs/009695399/functions/crypt.html)

我读到了:

crypt() 函数不必是可重入的。不需要可重入的函数不需要是线程安全的。

对我来说什么听起来不合理。

我的意思是如果另一个线程只是将不属于一起的值放入流中,我如何生成可复制的哈希?

是不是这个函数不需要线程安全才能正常工作?

【问题讨论】:

  • 不,它不是线程安全的。由于它使用的是相同的内部静态数据结构,因此两个线程同时调用 crypt() 将开始破坏彼此的数据。

标签: c multithreading freebsd crypt


【解决方案1】:

它不是线程安全的。您找到的引用只是说明不需要实现者使函数线程安全,因此不是。如果你从多个线程同时调用它,就会发生不好的事情。

【讨论】:

    【解决方案2】:

    只是回复这篇旧帖子让您知道:FreeBSD HEAD(阅读:12.0)将提供crypt_r() 的副本,它是线程安全的。尽情享受吧!

    FreeBSD man page

    【讨论】:

    • 请您再详细说明一下。听起来很有趣,但我完全不明白你想告诉我什么。
    • 我是将这个功能添加到 FreeBSD 的人。我做了一些谷歌搜索,偶然发现了这篇文章,特别提到了 FreeBSD(手册页链接)。我想我会发布此评论,以让其他人了解偶然发现此帖子的人。
    • 啊,确实!那是完美的:)如果您可以评论指向手册页的直接链接,以便我将其编辑到您的帖子中,或者您可以自己做,如果您愿意,那么这个答案确实是一个很大的贡献:)
    猜你喜欢
    • 1970-01-01
    • 2019-09-20
    • 2021-01-15
    • 2010-11-24
    • 2019-05-23
    • 2011-01-22
    • 1970-01-01
    • 2019-09-26
    • 1970-01-01
    相关资源
    最近更新 更多