我的代码正在使用以下堆栈挂起 fwrite:
libc.so.6.1::___lll_lock_wait
libc.so.6.1::fwrite
这似乎发生在 solaris 中。
我能想到的唯一不正确的事情是我的代码可能会尝试在用于执行 fwrite 的同一个 FILE 指针上执行并行 fclose。如果发生并行关闭,是否会导致这种堆栈?
但是,我不确定并行 fclose 调用是否真的发生了?
这可能是什么问题?
最佳答案
好像有什么东西在某处爆炸了。对 FILE* 的操作通常使用内部锁来保证线程安全。您可能已经做了一些事情来在某处调用未定义的行为。例如。你已经破坏了堆,覆盖了一些重要的东西(比如文件),或者文件*已经关闭——在这种情况下,如果你继续使用它,你就不能指望任何理智的事情发生。
关于c - 什么会导致 fwrite 挂起?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3686888/