这段代码不是线程安全的,不是吗?

时间:2011-12-11 01:02:15

标签: c++ c linux thread-safety errno

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

int savedErrno = errno;

//call some function that may modifies errno

if (errno == xxx)
   foo();

errno = savedErrno;

我不认为这是线程安全的,我是否正确?

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

任何人都可以帮我澄清一下,谢谢......

2 个答案:

答案 0 :(得分:9)

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

来自男人(3)errno:

  

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

答案 1 :(得分:1)

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