1、修饰指针变量的几种情况
2、修饰不同类型的引用
3、修饰数组的引用
[……]
1、C++中多态是一种泛型编程思想,虚函数是实现这个思想的语法基础;
2、虚函数列表简称虚表,出现在对象的头部,即虚表的首地址即对象地址;
3、通过创建好的对象,可以得到虚表,从而通过偏移可获取所有虚函数的地址;
4、示例代码:
5、执行结果:
[……]
1、GCD定时器实现的基础代码
1 2 | dispatch_source_t timer = dispatch_source_create(DISPATCH_SOURCE_TYPE_TIMER, 0, 0, ); dispatch_source_set_timer(timer, DISPATCH_TIME[......]<p class="read-more"><a href="https://www.yusian.com/blog/project/2018/11/30/1106431446.html">继续阅读</a></p> |
1、简述
1.1、多线程操作中必然会涉及到锁的概念,使用锁来确保线程安全;
1.2、事实上某些操作,比如数据读取是可以允许多线程同时操作的;
1.3、但写操作不行,数据写入动作必须是同步的,否则会出现数据错误;
1.4、如果读、写操作动作同时发生,并且多线程并发操作时该如何处理?
1.5、通过普通加锁实现线程同步,这样线程是安全了,但影响了读取的效率;
1.6、基本思路是
1.6.1、允许读取操作多线程并发进行;
1.6.2、写入操作只能单个线程同步进行;
1.7、常用的解决方案有两个
1.7.1、pthread_rwlock
1.7.2、dispatch_barrier_async
2、代码示例
2.1、pthread_rwlock[……]
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 |
执行结果:[……]