我正在阅读一本名为 Linux 系统编程 的书。引自这本书:



但随后它将遵循:



我很困惑,write() 是否可重入?因为我认为它与声明相冲突:

最佳答案

只是为了添加answer @Joachim Pileborg 先生在他的wiki entry for Reentrancy中已经提到的内容,按照ojit_a的规定,函数可重入的基本规则是

  • 可重入代码可能不包含任何静态(或全局)非恒定数据。
  • 可重入代码不得修改其自己的代码。
  • 可重入代码不能调用非可重入计算机程序或例程。

  • 详细地说,该函数(如果可重入)对其自己的实现(从其自身使用的内部数据结构)实现是否有任何问题,无论是从不同的上下文中调用。

    提供给函数的参数(例如文件描述符)不会影响其重入性。

    因此,对于write()而言,该函数本身是可重入的,但是如果从不同线程使用相同的文件描述符进行调用,则显然会产生错误的结果。同样,这并不意味着write()的可重入性消失了。它是可重入的,但不是线程安全的,并且这两个是不同的方面。

    关于c - C语言中的可重入和可重入?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30659646/

    10-11 16:12