簡體   English   中英

AC庫中的線程安全說明

[英]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 )本質上是線程安全的,因此答案是:

是的,這很安全。

根據POSIX規范

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.

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