我正在尝试使用 GCD 作为数十个原子属性的替代品。我记得在 WWDC 上,他们谈到 GCD 可以用于高效的事务锁定机制。
在我的 OpenGL ES runloop 方法中,我将所有绘图代码放在一个由dispatch_sync
自定义创建的串行队列执行的块中。运行循环由 CADisplayLink 调用,据我所知,它发生在主线程上。
有 ivars 和属性既可用于绘图,也可用于控制将要绘制的内容。问题是必须有一些锁定以防止并发问题,以及在两个绘制帧之间从主线程以事务方式查询和修改 OpenGL ES 场景状态的方法。
通过在该串行队列上执行一个块,我可以使用 GCD 以事务方式修改一组属性。
但似乎我无法使用 GCD 将值读入主线程,同时阻塞执行绘图代码的队列。dispatch_synch
没有返回值,但我想在两个帧的绘制之间准确地访问表示值,用于读取和写入。
barrier
他们说的就是这个吗?这是如何运作的?