如何从 OSSpinLock 迁移到 os_unfair_lock()?
How to migrate from OSSpinLock to os_unfair_lock()?
自 macOS 10.12 起,OSSpinLock
已被弃用。 XCode 错误消息敦促我改用 os_unfair_lock_unlock()
。
作为我依赖的一些开源东西的遗产,我从 2010 年开始使用 RegexKitLite。
如何转换自旋锁类型?简单的解锁和锁定我可以管理,但是这些比较让我头疼:
if(rkl_cacheSpinLock != (OSSpinLock)0) { ... }
rkl_cacheSpinLock
是 os_unfair_lock
类型,已经初始化。 OSSpinLock 似乎是 int
类型,所以这个 if 语句显然不起作用。
有人能指出我解决这个问题的正确方法吗?我对C不太熟悉,对指针的运算也不是很懂。
编辑
在学习了一些 C 之后,我开始了解类型转换。我想出了一个 似乎 可行的解决方案。我对这个级别的 OS 功能的理解是不存在的。 os_unfair_lock 对于傻瓜来说没有很好的文档记录,但看起来我没有破坏任何东西。
if (rkl_cacheSpinLock._os_unfair_lock_opaque != 0) { ... }
似乎没有人花时间回答您的问题,所以这里是:
#include <os/lock.h>
void foo()
{
os_unfair_lock lock = OS_UNFAIR_LOCK_INIT;
os_unfair_lock_lock(&lock);
/* Your critical section here */
os_unfair_lock_unlock(&lock);
}
请参阅 documentation 以了解有关锁定和解锁位置限制的更多详细信息(tldr:锁定和解锁必须是同一个线程)。
自 macOS 10.12 起,OSSpinLock
已被弃用。 XCode 错误消息敦促我改用 os_unfair_lock_unlock()
。
作为我依赖的一些开源东西的遗产,我从 2010 年开始使用 RegexKitLite。
如何转换自旋锁类型?简单的解锁和锁定我可以管理,但是这些比较让我头疼:
if(rkl_cacheSpinLock != (OSSpinLock)0) { ... }
rkl_cacheSpinLock
是 os_unfair_lock
类型,已经初始化。 OSSpinLock 似乎是 int
类型,所以这个 if 语句显然不起作用。
有人能指出我解决这个问题的正确方法吗?我对C不太熟悉,对指针的运算也不是很懂。
编辑
在学习了一些 C 之后,我开始了解类型转换。我想出了一个 似乎 可行的解决方案。我对这个级别的 OS 功能的理解是不存在的。 os_unfair_lock 对于傻瓜来说没有很好的文档记录,但看起来我没有破坏任何东西。
if (rkl_cacheSpinLock._os_unfair_lock_opaque != 0) { ... }
似乎没有人花时间回答您的问题,所以这里是:
#include <os/lock.h>
void foo()
{
os_unfair_lock lock = OS_UNFAIR_LOCK_INIT;
os_unfair_lock_lock(&lock);
/* Your critical section here */
os_unfair_lock_unlock(&lock);
}
请参阅 documentation 以了解有关锁定和解锁位置限制的更多详细信息(tldr:锁定和解锁必须是同一个线程)。