gpt4 book ai didi

objective-c - 如何从 OSSpinLock 迁移到 os_unfair_lock()?

转载 作者:行者123 更新时间:2023-12-03 23:10:49 26 4
gpt4 key购买 nike

从 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_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:它必须是锁定和解锁的同一线程)。

关于objective-c - 如何从 OSSpinLock 迁移到 os_unfair_lock()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57696275/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com