在Linux下用於防止競爭的機制包括:信號量,completion,自旋鎖。
completion,本質上是一個計數器,主要用於線程之間的同步。當線程調用wait_for_completion(及其類似函數)檢測該計數器爲0時,被阻塞,否則往下執行。當一個線程完成工作時,調用complete(_all),增加計數器的值,這樣可以喚醒阻塞的線程。注意,complete_all會將計數器設置爲一個很大的值(UINT_MAX/2),因此確定沒有線程被阻塞後,可以調用reinit_completion重置計數器。