GCD大中枢派发学习
iOS中的常见多线程方案
首先我们在学习多线程之前先了解一下iOS常见的多线程的方案
常见的GCD 使用 和死锁
常见的使用可以看之前写的博客
在这里强调一下容易混洗的术语
有4个术语比较容易混淆:同步、异步、并发、串行
同步和异步主要影响:能不能开启新的线程
同步:在当前线程中执行任务,不具备开启新线程的能力
异步:在新的线程中执行任务,具备开启新线程的能力
并发和串行主要影响:任务的执行方式
并发:多个任务并发(同时)执行
串行:一个任务执行完毕后,再执行下一个任务
GCD 多线程的安全隐患
简单的一些理解
用一块资源可能会被多个线程共享,也就是多个线程可能会访问同一块资源
比如多个线程访问同一个对象、同一个变量、同一个文件
当多个线程访问同一块资源时,很容易引发数据错乱和数据安全问题
🌰
存钱取钱
同时对账户进行如下操作
dispatch_queue_t queue = dispatch_get_global_queue(0, 0);
dispatch_async(queue, ^{
for (int i = 0; i < 10; i++) {
[self saveMoney];
}
});
dispatch_async(queue, ^{
for (int i = 0; i < 10; i++) {
[self drawMoney];
}
});
}
/**
存钱
*/
-
(void)saveMoney
{int oldMoney = self.money;
sleep(.2);
oldMoney += 50;
self.money = oldMoney;NSLog(@“存50,还剩%d元 - %@”, oldMoney, [NSThread currentThread]);
}
/**
取钱
*/
-
(void)drawMoney
{int oldMoney = self.money;
sleep(.2);