我有像下面用原子取代條件嗎?
pthread_spin_lock(&slock);
if (round_robin_next_ == hp_count() - 1) {
round_robin_next_ = 0;
} else {
round_robin_next_++;
}
pthread_spin_unlock(&slock);
我使用自旋鎖爲了使上述線程安全的,並確保每個線程比前一個round_robin_next_的下一個值在我的代碼的條件。你可以看到round_robin_next_是圓形的,達到一定的數值並回到0.
我的問題是上面通過使用gcc intrinsics以某種方式自由鎖定了嗎?或一些平臺特定的指示?我在使用gcc 4.7的64位Linux上,如果無法移植,我無所謂與特定於平臺的解決方案無關。
這是完全一般的,還是單一消費者或單一生產者,或兩者兼而有之? (SPSC的特定緩衝區肯定可以無鎖地完成。) –
@KerrekSB不確定你的意思。它的一個函數被許多線程調用以獲得下一個值round_robin_next_(這是一個共享變量) – user1461001
我可能誤解了你想要做的事情。你*只*想讀取和推進一個櫃檯,這就是全部? –