ios 线程同步,解决多线程修改数组等问题
程序员文章站
2022-09-03 08:27:59
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可以节省系统调用和上下文切换。