Skip to content

GCD相关的线程队列、常见用法、死锁探究

License

Notifications You must be signed in to change notification settings

ysunwill/GCDDemo

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

6 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

GCDDemo

demo分三个部分,线程队列常见用法死锁探究

Xcode控制台可以查看具体的log输出

基于Objective-C,iOS 9.0

🚜线程队列

自定义串行队列 自定义并发队列 主队列 全局并发队列
同步(sync) 串行执行
不开辟新线程
串行执行
不开辟新线程
可能发生死锁 串行执行
不开辟新线程
异步(async) 串行执行
开辟新线程
并发执行
开辟新线程
串行执行
不开辟新线程
并发执行
开辟新线程

📢注意,主队列 + 同步,主线程执行此任务会发生死锁,子线程则不会

🚖常见用法

常见的几个API,可能需要根据不同的业务需求灵活变通

🚃死锁探究

不同的情况,发生的死锁的标灰

  • 主线程 + 主队列 + 同步
  • 子线程 + 主队列 + 同步
  • 主队列 + 异步 + 同步
  • 主队列 + 异步 + 异步
  • 串行队列 + 同步 + 同步
  • 串行队列 + 同步 + 异步
  • 串行队列 + 异步 + 同步
  • 串行队列 + 异步 + 异步
  • 串行队列1同步 + 串行队列2同步
  • 串行队列1同步 + 串行队列2异步
  • 串行队列1异步 + 串行队列2同步
  • 串行队列1异步 + 串行队列2异步
  • 并发队列 + 同步 + 同步
  • 并发队列 + 同步 + 异步
  • 并发队列 + 异步 + 同步
  • 并发队列 + 异步 + 异步

总结:使用同步函数(sync)往当前串行队列添加任务,会产生死锁

License

MIT

About

GCD相关的线程队列、常见用法、死锁探究

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published