gpt4 book ai didi

C11 相当于 POSIX flockfile()?

转载 作者:行者123 更新时间:2023-12-03 17:03:20 25 4
gpt4 key购买 nike

POSIX 和 C11 都要求流具有关联的锁以防止数据竞争和交错。 POSIX 文档 flockfile()和相关函数以允许线程安全 I/O 跨越多个调用。是否有等效的 C 函数?我不记得有一个,也找不到提到的一个,这并不一定意味着一个不存在。

在相关说明中,是否可以安全地假设任何声称符合 POSIX 的实现都会尊重 flockfile()当使用 C11 线程.h 时?我认为大多数支持threads.h的主要POSIX兼容C实现都是通过在pthreads上构建的,这意味着这种假设通常是安全的。但是,多线程很难,知道异常会很有帮助。

最佳答案

Both POSIX and C11 require that streams have an associated lock to prevent data races and interleaving.


是的,但对该锁的特定形式没有要求,C 也没有要求程序可以直接访问该锁,也没有任何标准机制可以做到这一点。

POSIX documents flockfile() and related functions to allow thread-safe I/O to span multiple calls. Is there an equivalent C function?


没有发布的 C 语言规范版本记录了 flockfile() 的类似物。 , ftrylockfile() , 或 funlockfile() .一个严格符合 C11 或 C17 的程序想要防止被交错的不同线程调用 I/O 函数将(因为它是严格符合的)在未定义宏 __STDC_NO_THREADS__ 的实现上使用 C 线程库。 .这样的程序可以为此目的使用该库的互斥锁实现。没有标准方法可以直接访问与个人 FILE 直接关联的任何锁。对象。

On a related note, is it safe to assume any implementation claimingPOSIX conformance will respect flockfile() when using C11 threads.h?


据我所知,POSIX C 语言接口(interface)仍然是专门根据 C99 定义的,因此 POSIX 对 C11 线程视而不见。从这个意义上说,不,假设关于线程行为的 POSIX 规定将适用于 C11 线程是不安全的。

Ithink most major POSIX-compliant C implementations that supportthreads.h do so by building on pthreads, which would imply such anassumption is usually safe. However, multithreading is hard, and itwould be helpful to know of exceptions.


在实践中,我期望 POSIX 系统上的 C11 和更高版本的实现将确保 C11 线程实际上确实具有 POSIX 线程的语义,无论是通过在 POSIX 线程之上实现 C11 线程还是通过其他方式。因此,有理由希望 C11 线程能够根据需要与 flockfile() 进行互操作。 ,但省略专门探测该细节的单元测试是不合理的。
另请注意,在这样的上下文中,“通常安全”是说“不安全”的一种狡猾的方式。

关于C11 相当于 POSIX flockfile()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54897650/

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