簡體   English   中英

C:如何使此函數具有線程安全性?

[英]C: How to make this function thread-safe?

通常,當我想使函數成為線程安全的時,我會鎖定共享數據,然后在完成工作后釋放。

在這里,我正在使用全局變量。 簡單地鎖定和解鎖並不能確保該函數返回唯一值。 如何將以下函數修改為線程安全的,並確保其始終返回唯一的整數?

int count = 0;
int GetUnique()
  {
    count = count + 1;
    return count;
  }

有人提到在函數內部創建局部靜態變量? 這將如何以及為何起作用(如果為真)?

在這種情況下,您希望使用原子增量,如果您使用GCC內部函數,則無需鎖定或互斥。 __sync_add_and_fetch是您在此處尋找的內容,否則對於VC InterlockedIncrement將會執行相同的操作。

您可以使用以下代碼使此代碼可移植:

#ifdef _WIN32
#define SYNC_ADD_AND_FETCH(x) InterlockedIncrement(&(x))
#else
#define SYNC_ADD_AND_FETCH(x) __sync_add_and_fetch(&(x), 1)
#endif

int main(int argc, char *argv[])
{
  int v = 0;
  SYNC_ADD_AND_FETCH(v);
  printf("%d\n", v);
}

將其設置為靜態還不足以保護該變量不受其他線程即時修改的影響,實際上,它無濟於事。

暫無
暫無

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

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