从 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不太熟悉,也不太了解指针的算术。
EDIT
在学习了一些 C 语言之后,我开始了解类型转换。我想出了一个解决方案seems上班。我对这个级别的操作系统功能的理解是不存在的。对于傻瓜来说, 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);
}
请参阅文档 https://developer.apple.com/documentation/os/1646466-os_unfair_lock_lock有关应锁定和解锁位置的限制的更多详细信息(tldr:它必须是锁定和解锁的同一线程)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)