首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >替代在可变数组访问上普遍使用@同步指令的方法

替代在可变数组访问上普遍使用@同步指令的方法
EN

Stack Overflow用户
提问于 2017-02-23 06:49:26
回答 1查看 190关注 0票数 0

我正在设计一个Objective中的单例类,它将被多个线程访问。我的类中有3-4个NSMutableArray,外部类可以使用读取、添加和删除操作,这些操作当然都封装在这个类中。

由于NSMutableArray不是线程安全的,所以我使用@synchronized()使操作线程安全,但是它会导致过多使用@synchronized()块。

因为对于每个3-4个数组,我至少有一个add函数、1个remove函数和5次我需要读取的值。因此,对于一个数组,我至少使用了7个@synchronized()块。对于4个数组,需要在我的单例类中添加28个块

是否有更好的方法来解决我的问题?,或者,如果我过度使用这些@synchronized指令,它会导致问题吗?

我知道,如果我想使我的对象线程安全,它会减慢我的代码,但除此之外,还有什么缺点吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-02-23 07:08:00

通常,仅仅同步原始调用(CRUD)以获得线程安全是不够的。这个细粒度级别只是基本的,但您还必须考虑更全局的级别,并“原子化”更多的代码。如何做到这一点在很大程度上取决于您的实际实现。多线程是邪恶的(Tm),需要一个全面的视图,因此没有一般的答案。

同步块通常会减慢应用程序的速度,至少如果调用太频繁的话。有时,最好将多个调用分组在一个同步块中,以避免锁定开销。或者,如果调用非常短,可以使用自旋锁来防止不必要的任务挂起(请参阅在这里问一个老问题/答案)。

有关更多细节,您只需咨询苹果文档即可。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42408856

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档