[英]Thread safety clarification in a c library
有人可以向我澄清以下代碼是否是線程安全的嗎?
int get_time(uint64_t *time)
{
struct timespec spec;
if (!time)
return -EFAULT;
if (clock_gettime(CLOCK_REALTIME, &spec) == -1)
return -errno;
*time = //convert timespec into nanoseconds
return SUCCESS;
}
這是庫中的一個API,可以被多個線程調用。 spec是一個局部變量,因此應該沒有問題。 正確? 我的疑問是關於clock_getime(POSIX.1-2001)和對time參數的賦值。 我想介紹一個互斥鎖,但是我不確定是否嚴格要求它。
除了在代碼中使用自動變量外,您什么都沒有使用,唯一的函數調用( clock_gettime
)本質上是線程安全的,因此答案是:
是的,這很安全。
3.396線程安全
可以由多個線程同時安全地調用的函數。 除非另有明確說明,否則 IEEE Std 1003.1-2001系統接口卷中定義的每個函數都是線程安全的 。 示例包括任何“純”函數,在訪問靜態存儲時將互斥鎖鎖定的函數或線程之間共享的對象。
規格上沒有列出該功能的例外情況:
http://pubs.opengroup.org/onlinepubs/009695399/functions/clock_getres.html
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.