同步队列的死锁问题
2014-10-25 20:43
246 查看
Main.m
#import <Foundation/Foundation.h> #import "Person.h" int main(int argc, const char * argv[]) { @autoreleasepool { /* //创建Serial Dispatch Queue dispatch_queue_t serialQueue = dispatch_queue_create("test", DISPATCH_QUEUE_SERIAL); //创建Concurrent Dispatch Queue dispatch_queue_t concurrentQueue = dispatch_queue_create("concurrent queue", DISPATCH_QUEUE_CONCURRENT); //释放,有create就应该有release dispatch_release(serialQueue); dispatch_release(concurrentQueue); */ /* //获取系统主线程 dispatch_queue_t queue = dispatch_get_main_queue(); //获取系统创建默认的异步线程 dispatch_queue_t globalQueue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0); */ //dispatch_async 使用 dispatch_queue_t queue = dispatch_get_main_queue(); //死锁1 //在主线程队列里面添加一个任务,因为是同步,所以要等到添加的任务执行完才能继续往下走. //但是新添加的任务排在队列的末尾,要执行任务必须要等这前面的任务执行完,因此又回到了第一步。程序卡死,不能输出end // NSLog(@"begin"); // dispatch_sync(queue, ^{ // NSLog(@"sync1"); // }); // NSLog(@"end"); //死锁2 //外层 在主线程队列里面添加一个任务,因为是异步,所以不用任何添加的任务执行完就可以继续往下走,因此能够输出end //里层 用同步添加任务到主线程队列,因此要等到添加的任务执行完才能继续往下走,程序卡死,不能输出sync1。 //经验只谈:永远也不要往主线程中同步添加事件. // NSLog(@"begin"); // dispatch_async(queue, ^{ // dispatch_sync(queue, ^{ // NSLog(@"sync1"); // }); // }); // NSLog(@"end"); // // [[NSRunLoop currentRunLoop] run]; Person *ps1 = [Person sharePerson]; ps1.age = 30; Person *ps2 = [Person sharePerson]; NSLog(@"%d",ps2.age); } return 0; }Person.h
@interface Person : NSObject @property (nonatomic, assign) int age; +(Person *)sharePerson; @endPerson.m
@implementation Person static Person *instace = nil; //+(Person *)sharePerson //{ // @synchronized(self){ // if (!instace) { // instace = [[Person alloc] init]; // } // } // return instace; //} + (Person *)sharePerson { //使用GCD创建单利模式 static dispatch_once_t onceToken; dispatch_once(&onceToken, ^{ instace = [[Person alloc] init]; }); return instace; }
相关文章推荐
- java线程同步之死锁问题
- 同步与死锁的问题
- java多线程(同步与死锁问题,生产者与消费者问题)
- 进程同步及避免死锁经典问题
- java多线程(同步和死锁,生产者和消费者问题)
- 单车道问题 - 进程同步互斥与死锁问题的解决
- 主队列中添加的同步操作永远不会被执行,会死锁原因
- 针对项目中同步队列死锁的解决方案
- 进程同步互斥——不死锁的哲学家问题
- uc笔记12---竞争与同步,互斥量,信号量,死锁,条件变量,哲学家就餐问题
- 理解B/S结构中服务端同步与异步机制的区别,通过使用ASP.Net异步处理节约队列时间成本,解决大并发量问题
- 同步和互斥的一些问题(死锁,优先级逆转)
- 同步和互斥的一些问题(死锁,优先级逆转)
- 线程问题——同步和死锁
- J2SE学习笔记:多线程、单例模式延迟加载懒汉式同步、死锁问题
- java 同步死锁问题
- 同步和互斥的一些问题(死锁,优先级逆转)
- day11多线程,run方法。卖票多线程示例。synchronized,同步锁对象,回顾单例。死锁问题
- 黑马程序员_同步过程的死锁问题(哲学家难题)
- 黑马程序员----多线程2(安全问题、同步代码块、同步函数、死锁)