gpt4 book ai didi

c - C中的可重入和可重入?

转载 作者:太空狗 更新时间:2023-10-29 17:17:12 25 4
gpt4 key购买 nike

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

What about system calls and other library functions? What if your process is in the middle of writing to a file or allocating memory, and a signal handler writes to the same file or also invokes malloc()? Some functions are clearly not reentrant. If a program is in the middle of executing a nonreentrant function and a signal occurs and the signal handler then invokes that same nonreentrant function, chaos can ensue.

但接下来会是:

Guaranteed-Reentrant Functions

Functions guaranteed to be safely reentrant for use in signals

some functions here..

write()

some functions here..

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

What if your process is in the middle of writing to a file?

最佳答案

只是补充一下 @Joachim Pileborg 先生已经在他的 answer 中提到的内容, 根据 wiki entry for Reentrancy , 函数可重入的基本规则是

  1. 可重入代码不得包含任何静态(或全局)非常量数据。
  2. 可重入代码不得修改自己的代码。
  3. 可重入代码不得调用非可重入计算机程序或例程。

详细来说,如果该函数是可重入的,那么无论是从不同的上下文调用,它的自己的实现(归纳出它自己使用的内部数据结构)都不会有任何问题。

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

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

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

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com