考虑这段琐碎的代码
DispatchQueue.global().async {
print("2")
}
print("1")
我们可以说输出如下:
1
2
在任何情况下执行顺序都会有所不同(不管使用的队列类型如何)?可以强迫他们手动显示吗?
答案 0 :(得分:2)
您说:
我们可以说输出如下...
不,充其量您只能说输出将经常/经常按该顺序输出,但不能保证一定如此。
该代码段将异步地将代码分发到全局并发队列,该队列将在单独的工作线程上运行它,并且在没有任何同步的情况下,您在当前线程与该工作线程之间具有经典的竞争条件。尽管实际上,您经常会在print
之前看到1
,但不能保证这些2
语句的顺序。
这是技术面试中的常见问题之一;出于某些原因,访问员期望得出结论,此处的执行顺序是恒定的。因此(由于它与我的理解不一致),我决定进行澄清。
您的理解是正确的,绝对不能保证这两个print
语句的顺序。
在任何情况下执行顺序都会不同
一些想法:
例如,通过调整队列优先级,可以更改1
出现在2
之前的可能性。但是,同样,不能保证。
有多种机制可以保证顺序。
notify
;