iOS

多线程的多读单写(保证读写安全)

2020-10-27  本文已影响0人  Jean_Lina

proxy:代理人,委托书
schedule:时间表

方案1:pthread_rwlock_rdlock、pthread_rwlock_wrlock

#import <pthread.h>

@property (nonatomic, assign) pthread_rwlock_t rwlock;

#pragma mark 锁的初始化
- (instancetype)init
{
    self = [super init];
    if (self) {
        pthread_rwlock_init(&_rwlock, NULL);
    }
    return self;
}
#pragma mark 多线程调用
- (void)readAndWrite {
    dispatch_queue_t queue = dispatch_get_global_queue(0, 0);
    dispatch_async(queue, ^{
        [self read];
    });
    dispatch_async(queue, ^{
        [self write];
    });
    dispatch_async(queue, ^{
        [self write];
    });
    dispatch_async(queue, ^{
        [self read];
    });
    dispatch_async(queue, ^{
        [self read];
    });
}
#pragma mark 读操作
- (void)read {
    pthread_rwlock_rdlock(&_rwlock);
    NSLog(@"%s", __func__);
    pthread_rwlock_unlock(&_rwlock);
}
#pragma mark 写操作
- (void)write {
    pthread_rwlock_wrlock(&_rwlock);
    NSLog(@"%s", __func__);
    sleep(4);
    pthread_rwlock_unlock(&_rwlock);
}
#pragma mark 锁释放
- (void)dealloc
{
    pthread_rwlock_destroy(&_rwlock);
}

方案2:dispatch_async 、dispatch_barrier_async

@property (nonatomic, strong) dispatch_queue_t queue;

- (instancetype)init
{
    self = [super init];
    if (self) {
        self.queue = dispatch_queue_create("CONCURRENTQUEUE", DISPATCH_QUEUE_CONCURRENT);
    }
    return self;
}
#pragma mark 多线程读写操作
- (void)readAndWrite {
    dispatch_queue_t queue = dispatch_get_global_queue(0, 0);
    dispatch_async(queue, ^{
        [self read];
    });
    dispatch_async(queue, ^{
        [self write];
    });
    dispatch_async(queue, ^{
        [self write];
    });
    dispatch_async(queue, ^{
        [self write];
    });
    dispatch_async(queue, ^{
        [self write];
    });
}
#pragma mark 读操作
- (void)read {
    dispatch_async(self.queue, ^{
        NSLog(@"%s", __func__);
    });
}
#pragma mark 写操作
- (void)write {
    dispatch_barrier_async(self.queue, ^{
        NSLog(@"%s", __func__);
        sleep(4);
    });
}
上一篇 下一篇

猜你喜欢

热点阅读