原子與運算元
可以在不同執行緒之間同時訪問原子變數,而不會產生競爭條件。
/* a global static variable that is visible by all threads */
static unsigned _Atomic active = ATOMIC_VAR_INIT(0);
int myThread(void* a) {
++active; // increment active race free
// do something
--active; // decrement active race free
return 0;
}
允許基型別允許的所有左值操作(修改物件的操作),並且不會導致訪問它們的不同執行緒之間的競爭條件。
- 原子物件的操作通常比正常算術操作慢幾個數量級。這還包括簡單的載入或儲存操作。所以你應該只將它們用於關鍵任務。
- 通常的算術運算和賦值如
a = a+1;
實際上是對a
的三個操作:首先是載入,然後是加法,最後是儲存。這不是免費匹配。只有操作a += 1;
和a++;
。