什么是死锁 ?
什么时候会发生死锁?
出现死锁我们怎么解决
死锁就是线程之间的相互等待
简单的来说 就是你等我 我等你 线程出现这种情况会导致死锁的放生
举个简单的例子 :
#import "GCDViewController.h"
@interface GCDViewController ()
{
/**
* 串行队列
*/
dispatch_queue_t mainQueue;
/**
* 并行队列
*
* @return <#return value description#>
*/
dispatch_queue_t globelQueue;
}
@end
@implementation GCDViewController
- (void)viewDidLoad {
[super viewDidLoad];
/**
* 同步调度:dispatch_sync(<#dispatch_queue_t queue#>, <#^(void)block#>)
把一个任务添加到某个queue 等这个任务执行完 调用线程才会执行
异步调度:dispatch_async(<#dispatch_queue_t queue#>, <#^(void)block#>)
把一个任务添加到某个队列立马离开 不管这个任务在这个队列的执行状态
*
*
*/
NSLog(@"3333333333333333333");
dispatch_sync(dispatch_get_main_queue(), ^{
NSLog(@"111111111111111111");
});
NSLog(@"2222222222222222222");
// Do any additional setup after loading the view.
}
- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
/*
#pragma mark - Navigation
// In a storyboard-based application, you will often want to do a little preparation before navigation
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
// Get the new view controller using [segue destinationViewController].
// Pass the selected object to the new view controller.
}
*/
@end
打印结果只有3333.。。
为什么?
dispatch_sync 这句话的作用是阻塞主线程的
我们有在主线程中派遣任务 主线程没办法执行 会发生相互等待 出现死锁