Pebble Coding

ソフトウェアエンジニアによるIT技術、数学の備忘録

pthread_mutex_t と NSLockはどのくらい速度に違いがあるのか

2つのスレッドでウェイトを入れながら、一つの変数に排他アクセスをそれぞれ5000回行ったときの時間です。
MacOSX 10.10.4 MacBook Air (13-inch, Early 2015)

@synchronized 0.092384 sec
objc_sync_enter 0.090988 sec
pthread_mutex_t 0.091280 sec
NSLock 0.089456 sec
OSSpinLock 0.088594 sec

値単体は意味のない数字なので、差分だけを取ります。
@synchronized +0.003790 sec
objc_sync_enter +0.002394 sec
pthread_mutex_t +0.002686 sec
NSLock +0.000860 sec
OSSpinLock +0 sec

10000で割ると、1回のロックあたり
@synchronized +0.379μsec
objc_sync_enter +0.239μsec
pthread_mutex_t +0.268 μsec
NSLock +0.086 μsec
OSSpinLock +0 μsec

どのロックもμmecに満たないので、どれを使ってもよさそうです。