相关疑难解决方法(0)

什么是Swift等同于Objective-C的"@synchronized"?

我搜索过Swift书,但找不到Swift版本的@synchronized.如何在Swift中进行互斥?

concurrency mutex swift

217
推荐指数
15
解决办法
10万
查看次数

在swift中创建线程安全数组

我有快速的线程问题.我有一个包含一些对象的数组.在委托上,类每秒都会获得新对象.之后我必须检查对象是否已经在数组中,所以我必须更新对象,否则我必须删除/添加新对象.

如果我添加一个新对象,我必须首先通过网络获取一些数据.这是handelt经过一个街区.

现在我的问题是,如何同步这项任务?

我尝试了一个dispatch_semaphore,但是这个阻止了UI,直到块完成.

我还尝试了一个简单的bool变量,它检查块当前是否执行并同时跳过compare方法.

但这两种方法都不理想.

什么是管理阵列的最佳方式,我不想在阵列中有重复的数据.

arrays multithreading read-write ios swift

51
推荐指数
8
解决办法
4万
查看次数

如何从 OSSpinLock 迁移到 os_unfair_lock()?

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

regex macos objective-c spinlock regexkitlite

4
推荐指数
1
解决办法
1835
查看次数

使用 os_unfair_lock_lock 进行快速访问竞争

我制作了一个自定义属性包装器,它提供了一种使用os_unfair_lock. 在启用 TSAN 的情况下测试我的包装器后,在使用锁定获取时报告了访问争用错误os_unfair_lock_lock(如下图所示)

访问比赛图像

不知何故,TSAN 报告认为线程安全的锁定结构并非如此。这里发生了什么?

locking thread-sanitizer swift data-race

2
推荐指数
2
解决办法
3389
查看次数