Synchronization Tool Evaluation

Introduction

Synchronization tool 的選擇不只看 correctness,也看 contention 下的成本:等待者是 spin / retry、sleep、進 queue,還是由 higher-level abstraction 管理。

CAS-Based Synchronization

CAS-based approach 是 optimistic synchronization:先假設衝突少,直接嘗試更新;若發現值被別人改過,再 retry。

  • Uncontended / moderate contention:overhead 低
  • High contention:大量 retry 會浪費 CPU,甚至比 lock 慢

Lock-Based Synchronization

Mutex lock / semaphore 是 pessimistic strategy:進 critical section 前先 acquire lock,避免同時修改。

  • High contention:可把等待者 block 到 queue,避免所有人一直 retry
  • Contended lock:可能需要 sleep、wait queue、context switch,成本較重

General Guidelines

SituationUsually better choiceIntuition
UncontendedCAS / atomic variable沒競爭時成本最低
Moderate contentionCASretry 通常很快成功
High contentionTraditional lock / semaphore避免大量 thread spin / retry
Single counter updateatomic variable只需保護單一變數
Short critical section on multicorespinlock省下 context switch
Finite identical resourcescounting semaphorevalue 表示剩餘數量
Complex condition synchronization condition variableprotocol 藏進 ADT,較不易寫錯

Tradeoff

Low-level tools(CAS、memory barrier)效能彈性高,但正確性難;higher-level tools(semaphore、monitor)較好用,但 overhead 與 scalability 取決於 implementation。

實務上通常由 OS / library 用 low-level primitive 實作可靠 abstraction,再讓 application 使用較高階的 tool。