美文网首页
信号量控制并发

信号量控制并发

作者: 活最好的自己 | 来源:发表于2019-04-21 18:29 被阅读0次

信号量不仅可以当成读写锁来使用, 也可以控制线程的最大并发数.

1. 读写锁

多个线程读写数据, 有可能造成数据不一致或者冲突的情况, 如多个线程同时对可变数组进行操作, 需要对每个线程的访问进行加锁操作.

-(void)setName:(NSString *)name{
    dispatch_semaphore_wait(self.nameStrSemaphore, DISPATCH_TIME_FOREVER);
    _name = [name copy];
    dispatch_semaphore_signal(self.nameStrSemaphore);
}

2. 控制并发数

当资源被占用完后, 新的线程就需要等待, 直到有新的资源被释放, 才能被等待的线程使用.

- (void)test1 {
    dispatch_queue_t queue = dispatch_get_global_queue(0, 0);

    dispatch_semaphore_t sema = dispatch_semaphore_create(2);
    
    //任务1
    dispatch_async(queue, ^{
        [self test1:1 semaphore:sema];
    });
    
    //任务2
    dispatch_async(queue, ^{
        [self test1:2 semaphore:sema];
    });
    
    //任务3
    dispatch_async(queue, ^{
        [self test1:3 semaphore:sema];
    });
}

- (void)test1:(NSInteger)num semaphore:(dispatch_semaphore_t)semaphore {
    dispatch_semaphore_wait(semaphore, DISPATCH_TIME_FOREVER);
    NSLog(@"执行任务%li",num);
    sleep(1);
    NSLog(@"任务%li完成",num);
    dispatch_semaphore_signal(semaphore);
}
NSURLSession下载.png

相关文章

  • iOS 顺序执行

    打印结果 GCD 信号量控制并发 (dispatch_semaphore)

  • sync.WaitGroup

    sync.WaitGroup 是控制一组 goroutine 的并发控制技术 信号量信号量是UNIX 系统提供的一...

  • 简单易懂的DispatchSemaphore

    DispatchSemaphore 信号量,一种用来控制并发访问资源的机制,多用于多线程中,可以控制并发线程数量。...

  • 2020-02-06 2.4 信号量 Samaphore

    本文是Java线程安全和并发编程知识总结的一部分。 2.4 信号量(对象Samaphore) 信号量是用来控制并发...

  • 16.Semaphore

    Semaphore也就是信号量,提供了资源数量的并发访问控制

  • GCD多线程:信号量和条件锁

    1.信号量 dispatch_semaphore_t 在NSOperation中,可以直接设置最大并发数来控制并发...

  • 信号量(二)iOS 信号量简单使用

    信号量:控制最大的并发数 打印结果 由于信号量为10,所以每次打印10个数。

  • Semophore

    Semophore是信号量的意思,用于控制并发访问的线程数。 demo如下:

  • 信号量

    信号量的使用: 信号量使用的业务场景: 一、锁 YYKit加锁代码: 二、异步返回 三、控制并发量,降低性能。

  • Java并发编程(三):Semaphore

    Java并发编程:Semaphore 简介 Semaphore翻译成字面意思为 信号量,Semaphore可以控制...

网友评论

      本文标题:信号量控制并发

      本文链接:https://www.haomeiwen.com/subject/jzpjgqtx.html