GCD解决方案的比赛条件
在上图中,您可以看到:
- 附录🌎已分配给线程2。
- 修改 ⚽已分配给线程5。
- 由于我是有意添加
usleep(3)
的,因此您可以看到Modify⚽得到了一个Error: Index out of range
。
两个线程访问相同的资源均导致此竞态条件 。 有几种方法可以解决此问题。
同步
同步的作用是确保完成指定的任务,这意味着告诉队列中的下一个任务等待。
屏障
当屏障执行时,它就像一个串行队列。 仅执行指定的任务。 屏障完成后,队列返回到正常的并发队列。
在上图中,您可以看到:
usleep(3)
的,因此您可以看到Modify⚽得到了一个Error: Index out of range
。 两个线程访问相同的资源均导致此竞态条件 。 有几种方法可以解决此问题。
同步的作用是确保完成指定的任务,这意味着告诉队列中的下一个任务等待。
当屏障执行时,它就像一个串行队列。 仅执行指定的任务。 屏障完成后,队列返回到正常的并发队列。