【问题标题】:How to migrate from OSSpinLock to os_unfair_lock()?如何从 OSSpinLock 迁移到 os_unfair_lock()?
【发布时间】:2020-01-01 21:50:10
【问题描述】:

从 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) { ... }

【问题讨论】:

    标签: objective-c regex macos spinlock regexkitlite


    【解决方案1】:

    似乎没有人花时间回答你的问题,所以这里是:

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

    【讨论】:

      猜你喜欢
      • 2020-05-14
      • 2018-06-23
      • 2021-07-18
      • 2019-11-11
      • 2018-10-28
      • 2010-10-13
      • 2018-10-25
      • 2019-05-31
      • 2016-11-09
      相关资源
      最近更新 更多