1
打印结果:
分析:这个主要是资源抢夺问题.打印结果很大程度上和计算机性能有关.本人运行打印结果一般是a=194!
变量a使用__block修饰,使其能在block内部访问并修改!
然后我们使用一个while()循环,在内部,我们创建一个异步任务,并将其放在全局队列(并发队列)中执行!
该任务会开启新的线程去执行,由于是异步所以不会等待这个异步任务执行完毕,而是又回到while循环中执行
新的任务.也就是说,在我们一次循环结束重新进入循环是,我们下一次的任务所捕获到的变量a还可能是0!
依次循环,也就是说,在a=0时,任务回来之前会添加不止一个任务到队列.
那么,当任务执行完后,a的值会被++,此时所有捕获到a的任务中的a都会变为++后的值,当再有任务执行完成后a会被重新赋值.
所以在a<10的循环里,a会被++的次数远大于10,所以a的值是从1递增的值,具体到多大,就要看系统对线程调度的能力了.
循环外部的打印:当任务返回的a<10时,循环一直在进行,循环外部的打印任务是不会被执行的,当任务返回的a>=10时
循环结束,打印当前a的值,所以a是大于等于10的值!
2
结果:1>5>2>3>4
3
结果:1>5>2>4>3
4
结果:1>5>2>4>3
5
结果:1>5>2,代码执行到此,后面代码造成死锁!