GCD自定义队列的学习小结(swift)

1.创建自定义队列

(1.)DispatchQueen(label:"") 默认为串行队列

//串行

let serialQueen = DispatchQueue(label:"serial");

serialQueen.sync {

print("最先加入的任务")

}

serialQueen.sync {

print("次之加入的任务")

}

print("最后的任务")

当前线程等待串行队列中的子线程执行完成之后再执行,串行队列中先进来的子线程先执行任务,执行完成后,再执行队列中后面的任务。

自定义串行队列嵌套执行同步任务会发生死锁(自定义串行队列异步嵌套执行同步任务同理)

let serialQueen = DispatchQueue(label:"serial");

serialQueen.sync {

print("会执行的代码")

serialQueen.sync {

print("不会执行的代码")

}

}

串行队列中的线程顺序执行,需等到上面的同步任务执行完毕开启下面的同步任务。而上面的同步任务还没有执行完。要等到下面的大括号才算执行完毕。但是下面的同步任务已经抢占资源了,所以它们会产生相互等待的转态。

自定义并发队列同步嵌套执行任务不会发生死锁

//并发

let concurrentQueue = DispatchQueue(label: "name", attributes: .concurrent)

concurrentQueue.sync {

print("会执行的代码")

concurrentQueue.sync {

print("会执行的代码")

}

}

因为是并发队列,第一个大括号里的任务不会相互等待,不会产生死锁。

你可能感兴趣的:(GCD自定义队列的学习小结(swift))