Tri*_*nal 4 regex macos objective-c spinlock regexkitlite
从 macOS 10.12 开始,OSSpinLock已弃用。XCode 错误消息敦促我os_unfair_lock_unlock()改用。
作为我依赖的一些开源东西的遗产,我从 2010 年开始使用 RegexKitLite。
如何转换自旋锁类型?简单的解锁和锁定我可以管理,但这些比较让我头疼:
if(rkl_cacheSpinLock != (OSSpinLock)0) { ... }
Run Code Online (Sandbox Code Playgroud)
rkl_cacheSpinLock是类型os_unfair_lock并已初始化。OSSpinLock 似乎是 type int,所以这个 if 语句显然不起作用。
任何人都可以指出我解决这个问题的正确方法吗?我对 C 不太熟悉,也不太了解指针的算术运算。
编辑
在学习了一些 C 之后,我开始了解类型转换。我想出了一个似乎有效的解决方案。我对这个级别的操作系统功能的理解是不存在的。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);
}
Run Code Online (Sandbox Code Playgroud)
有关锁定和解锁位置的限制的更多详细信息,请参阅文档(tldr:它必须是锁定和解锁的同一线程)。