给每个线程的时间是相同还是最短时间?

时间:2016-03-12 14:00:24

标签: ios multithreading

例如,在线程1中执行某些操作并使用全局变量,但另一个线程可能会更改此值

主题1

a = 1;   
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
       NSLog(@"a = %d", a);
});

主题2

a = 2;

有两个问题,

  1. 如果线程1先执行,我可以假设系统总是打印a = 1吗?或系统可以中途更改为线程2,然后更改为线程1并获得a = 2?
  2. 如果我不将NSLog放入dispatch_asyc(),是否会导致不同的结果?

1 个答案:

答案 0 :(得分:1)

  1. 你无法确切地说出或保证。您可以分配线程(或队列)优先级,但您仍然不知道到底会发生什么。
  2. 是的,日志记录会对运行时产生影响,同样您不知道它是否会对线程管理产生影响。
  3. 因此,如果您需要保护某些内容不被多个线程访问,那么您需要通过添加一些同步来保护它。你如何选择这样做取决于它是什么,每个案例都需要单独考虑。