0
我維持在OS X的碳C++應用程序有一個「自旋鎖」在看起來代碼中的對象中的一個這樣,幫助與OSSpinLock *使用替換而(真){睡眠(1);}
while (mState != RELEASED)
{
sleep(1);
}
有一個後期渲染)餵食給AudioUnitAddRenderNotify(維護回調將設置這些不同對象的mState。
我想使用內置OSSpinLock系列函數替換此(如果沒有別的,因爲他們是線程安全的,上面的代碼似乎沒有定)。
這將是一個合理的等價物?我是否也應該在維護線程中添加一些操作這些對象的mState的鎖定保護?
OSSpinLock spin_lock = OS_SPINLOCK_INIT;
if (!OSSpinLockTry(&spin_lock))
OSSpinLockLock(&spin_lock);
while (mState != RELEASED)
OSSpinLockTry(&spin_lock);
OSSpinLockUnlock(&spin_lock);
根據應用程序的不同,自旋鎖可以比最終跳入內核或更糟糕的對象執行得更好,從而導致上下文切換。但是,這仍然是一組有限的應用程序,應謹慎使用。 – Torlack 2009-04-08 16:05:59