多线程进程,两个地方同时 open 一个文件失败,假设失败原因不同,失败后获取 errno
我没见过设置 errno 的函数以及打印函数会加锁的代码
理论上是不是会有问题
我没见过设置 errno 的函数以及打印函数会加锁的代码
理论上是不是会有问题
1
feather12315 Dec 23, 2017 via Android
第二次错误会覆盖第一次的,我没记错的话
|
2
sfqtsh Dec 23, 2017 via Android
一般
#if !defined _LIBC || defined _LIBC_REENTRANT /* When using threads, errno is a per-thread value. */ #define errno (*__errno_location ()) #endif 才能保证没问题 |
3
pkookp8 OP @sfqtsh 看了下 man errno 说是线程安全的,glibc 里也定义了__thread,猜测是每个线程都有一个 errno
但 c 库是如何寻找到本线程的 errno 的,看不懂 |
4
pkookp8 OP @feather12315 如上。应该是一个线程中,新的会覆盖旧的。多线程好像不会,待会儿试试
|