私は、OS X でカーボン C++ アプリケーションを保守しています。コード内のオブジェクトの 1 つに、次のような「スピン ロック」があります。
while ( mState != RELEASED )
{
sleep( 1 );
}
これらのさまざまなオブジェクトの mState を設定する AudioUnitAddRenderNotify() に供給されるポスト レンダー メンテナンス コールバックがあります。
これを置き換えるために組み込みの OSSpinLock ファミリーの関数を使用することを考えていました (他に何もなければ、それらはスレッドセーフであり、上記のコードはそうではないようです)。
これは合理的に同等でしょうか?また、これらのオブジェクトの mState を操作するメンテナンス スレッドにロック保護を追加する必要がありますか?
OSSpinLock spin_lock = OS_SPINLOCK_INIT;
if (!OSSpinLockTry(&spin_lock))
OSSpinLockLock(&spin_lock);
while (mState != RELEASED)
OSSpinLockTry(&spin_lock);
OSSpinLockUnlock(&spin_lock);