[英]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.