欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

ios 线程同步,解决多线程修改数组等问题

程序员文章站 2022-05-01 17:44:14
ios 线程同步,解决多线程修改数组等问题。在ios开发中,支持多种同步方法,我们从耗时角度出发,评估各种同步对象的性能。 @synchronized nslock nscondition nsco...

ios 线程同步,解决多线程修改数组等问题。在ios开发中,支持多种同步方法,我们从耗时角度出发,评估各种同步对象的性能。

@synchronized

nslock

nscondition

nsconditionlock

nsrecursivelock

pthread_mutex_t

osspinlock

dispatch_barrier_async

耗时方面:

osspinlock耗时最少;

pthread_mutex其次。

nslock/nscondition/nsrecursivelock 耗时接近,220ms上下居中。

nsconditionlock最差,我们常用synchronized倒数第二。

dispatch_barrier_async也许,性能并不像我们想象中的那么好.推测与线程同步调度开销有关。单独block耗时在1ms以下基本上可以忽略不计的。

在访问次数比较多的情况下,imp访问耗时要比消息发送略小。 参看 nslock 与 nslock + imp 对比。

为什么不直接使用 imp 而使用直接声明函数指针的方式? xcode6下imp不能指定参数,报错如下

如何解决呢?修改llvm预处理设置即可。

如果只是粗略的使用锁,不考虑性能问题可以使用synchronized。

如果对效率有较高的要求,还是采用osspinlock比较好。

因为pthread的锁在也是用 osspinlock 实现的。osspinlock 的实现过程中,并没有进入kernel,使用osspinlock可以节省系统调用和上下文切换。