0

私は、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);
4

1 に答える 1