我在OS X上维护一个Carbon C++应用程序.在代码中的一个对象中有一个"自旋锁",看起来像这样,
while ( mState != RELEASED )
{
sleep( 1 );
}
Run Code Online (Sandbox Code Playgroud)
有一个后期渲染维护回调,它被提供给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);
Run Code Online (Sandbox Code Playgroud)