簡體   English   中英

這段代碼不是線程安全的,不是嗎?

[英]This code is not thread-safe, isn't it?

我看到了一段這樣的代碼,並想知道這是否是線程安全的:

int savedErrno = errno;

//call some function that may modifies errno

if (errno == xxx)
   foo();

errno = savedErrno;

我不認為這是線程安全的,我是否正確?

但我看到人們寫這樣的代碼,所以我不確定......

任何人都可以幫我澄清一下,謝謝......

每個線程都有自己的(線程特定的)errno副本,因此它看起來應該是安全的。

來自man(3)errno:

errno由ISO C標准定義為int類型的可修改左值,不得顯式聲明; errno可能是一個宏。 errno是線程本地的; 在一個線程中設置它不會影響其在任何其他線程中的值。

代碼只在一個線程中使用errno,實際上代碼只顯示一個線程。 所以,這個代碼片段是線程安全的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM