2

我看到一段这样的代码,想知道这是否是线程安全的:

int savedErrno = errno;

//call some function that may modifies errno

if (errno == xxx)
   foo();

errno = savedErrno;

我不认为这是线程安全的,对吗?

但是我看到有人写这样的代码,所以我不确定......

谁能帮我解释一下,谢谢...

4

2 回答 2

9

每个线程都有自己的(线程特定的)errno 副本,因此看起来应该是安全的。

来自 man (3) errno:

errno 由 ISO C 标准定义为 int 类型的可修改左值,不得显式声明;errno 可能是一个宏。errno 是线程本地的;在一个线程中设置它不会影响它在任何其他线程中的值。

于 2011-12-11T01:04:37.067 回答
1

代码只在一个线程中使用了errno,实际上代码只显示了一个线程。所以,这个片段是线程安全的。

于 2011-12-11T01:10:43.767 回答