我在 OS X 上维护一个碳 C++ 应用程序。代码中的一个对象中有一个“自旋锁”,如下所示,
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);