本文介绍了`errno'(Dan Pop)的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧! 问题描述 >在< pa **************************** @ bar.net> " Mac和QUOT; < fo*@bar.net>写道:> In <pa****************************@bar.net> "Mac" <fo*@bar.net> writes: [今天我碰巧看到这封邮件隐藏在草稿"文件夹 超过一个月!] 我很遗憾,因为如何定义`errno'作为一个宏可以帮助 多线程应用程序。请赐教。 - Vijay errno的常见宏定义是: #define errno(* __ errno()) 因此,如果您需要访问errno,请包含< errno.h>并使用它提供的任何定义/声明。 Dan - Dan Pop DESY Zeuthen,RZ集团电子邮件: Da ***** @ ifh.de 推荐答案 如果errno是一个普通的外部变量,那么 多线程应用程序中的所有线程总是会看到相同的errno。变量。 所以如果线程A调用一个可能改变errno的函数,那么在函数调用后立即检查 errno,然后另一个线程B可以 在线程A 读取errno的值之前调用一个不同的函数修改errno。因此,线程A可能读取错误的值。 在多线程应用程序中,您通常有一个修改过的标准 库,其中每个线程都有自己的errno。变量和一个库由线程X调用的函数修改属于 线程X的errno变量。通常errno是一个定义为函数调用的宏返回 当前线程的errno变量。 If "errno" were a plain extern variable, then all threads in amultithreading application would always see the same "errno" variable.So if thread A calls a function which might change errno, then checkserrno immediately after the function call, then another thread B couldbe calling a different function modifying errno just before thread Areads the value of errno. So thread A might read the wrong value. In multithreading applications, you usually have a modified standardlibrary where every thread has its own "errno" variable, and a libraryfunction called by thread X modifies the errno variable belonging tothread X. Usually errno is a macro defined as a function call returningthe errno variable of the current thread. 正如Dan所写: As Dan wrote: 假设每个线程都有自己的数据区。假设的__errno() 函数返回一个指向当前线程数据区的指针。 这样,每个线程都有效地获得了自己唯一的errno变量。 - Keith Thompson(The_Other_Keith) ks *** @ mib.org < http://www.ghoti.net/~kst> 圣地亚哥超级计算机中心< *> < http://users.sdsc.edu/~kst> 我们必须做点什么。这是事情。因此,我们必须这样做。 Assume each thread has its own data area. The hypothetical __errno()function returns a pointer into the data area of the current thread.This way, each thread effectively gets its own unique errno variable. --Keith Thompson (The_Other_Keith) ks***@mib.org <http://www.ghoti.net/~kst>San Diego Supercomputer Center <*> <http://users.sdsc.edu/~kst>We must do something. This is something. Therefore, we must do this. 如果errno是一个普通的外部变量,然后多线程应用程序中的所有线程总是会看到相同的错误。变量。所以如果线程A调用一个可能改变errno的函数,那么在函数调用之后立即检查 errno,然后另一个线程B可以在线程之前调用另一个函数修改errno A 读取errno的值。因此,线程A可能读取错误的值。 在多线程应用程序中,您通常有一个修改过的标准库,其中每个线程都有自己的errno。变量和由线程X调用的库函数修改属于线程X的errno变量。通常,errno是一个定义为函数调用的宏,它返回当前线程的errno变量。 If "errno" were a plain extern variable, then all threads in a multithreading application would always see the same "errno" variable. So if thread A calls a function which might change errno, then checks errno immediately after the function call, then another thread B could be calling a different function modifying errno just before thread A reads the value of errno. So thread A might read the wrong value. In multithreading applications, you usually have a modified standard library where every thread has its own "errno" variable, and a library function called by thread X modifies the errno variable belonging to thread X. Usually errno is a macro defined as a function call returning the errno variable of the current thread. 很好地解释。谢谢。 Nicely explained. Thanks. 这篇关于`errno'(Dan Pop)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!
10-20 12:16