因为在以前的开发中实在是很少会用到多线程的知识,但是现在手中的项目是做视频开发。
而在视频开发类项目中,最困难的就是逻辑和多线程处理,这几天没事研究了一下线程锁,我觉的一个简答的代码实例,就能体现出
GCD 线程锁的特征
还是先了解一点,在GCD 中实现锁的操作是通过线程队列来实现的
首先是一段没有锁操作的简单线程处理
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT,0), ^{
while (bstart)
{
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT,0), ^{
for (NSInteger i=0; i<50; i++)
{
NSLog(@"%ld",(long)i);
}
});
usleep(100*1000);
}
});
可以观察这一段代码的输出结果数字并不一定是从0。。。50
而是在中间可能会乱序。
因为我是在while循环中开了一个线程,然后在下次循环的时候又开了一个线程,这样两个线程都在执行输出,这样就会分不清时序,导致线程混乱
下面是加入对列队的线程
dispatch_queue_t queue =dispatch_queue_create("queue",DISPATCH_QUEUE_SERIAL);
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT,0), ^{
while (bstart) {
dispatch_async(queue, ^{
for (NSInteger i=0; i<50; i++)
{
NSLog(@"%ld",(long)i);
}
});
usleep(100*1000);
}
});
观察这个输处,由于所有while 循环开的线程都是队列线程,难么就会按队列先后顺序执行,这样的打印输出就全部是0。。。50;