1、什么是同步?
- 同,指协同、协助、互相配合。主旨在协同步调,按预定的先后次序运行。
- 线程同步,指一个线程发出某一功能调用时,在没有得到结果之前,该调用不返回。同时其它线程为保证数据一致性,不能调用该功能。
- 同步的目的,是为了避免数据混乱,解决与时间有关的错误。实际上,不仅线程间需要同步,进程间、信号间等都需要同步机制。
- 总结:所有“多个控制流,共同操作一个共享资源”的情况,都需要同步。[……]
1、DISPATCH_QUEUE_SERIAL
1.1、串行队列使队列中的任务同步执行,单次只能执行一个任务
1.2、示例代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | #import "ViewController.h" #import <pthread.h> @implementation ViewController static NSUInteger ticketCount_ = 20; - (void)viewDidLoad { [super viewDidLoad]; dispatch_queue_t queue = dispatch_queue_create("com.yusian.custom-queue", DISPATCH_QUEUE_SERIAL); for (int i = 0; i < 5; i++) { dispatch_async(queue, ^{ [self saleTicket]; }); } } - (void)saleTicket { NSUInteger remain = ticketCount_; sleep(1); ticketCount_ = --remain; NSLog(@"%ld, %@", ticketCount_, [NSThread currentThread]); } @end |
执行结果:[……]