IOS线程数据篇9之GCD功能使用大全:信号量的使用

信号量在使用中有几个方法比较重要:

dispatch_semaphore_create 创建一个信号量

dispatch_semaphore_wait 信号量等待,一直到资源可用

dispatch_semaphore_signal 发送一个信号量获取信号量资源

在初始化方法中:

    q1 = dispatch_queue_create("com.fwzhengwei.www", DISPATCH_QUEUE_CONCURRENT);

    dispatch_async(q1, ^{
            sem = dispatch_semaphore_create(1);
            dispatch_time_t time = dispatch_time(DISPATCH_TIME_NOW, 1.0*NSEC_PER_SEC);
            dispatch_semaphore_wait(sem, DISPATCH_TIME_FOREVER);
            NSLog(@"%@ %d", [NSThread currentThread], 0);
        });

button1响应

-(void)buttonaction1{
    NSLog(@"signal sem");
    dispatch_semaphore_signal(sem);
}

button2响应

-(void)buttonaction{
    NSLog(@"启动一个信号量请求");
    
    dispatch_async(q1, ^{
        dispatch_time_t time = dispatch_time(DISPATCH_TIME_NOW, 1.0*NSEC_PER_SEC);
        dispatch_semaphore_wait(sem, DISPATCH_TIME_FOREVER);
        NSLog(@"%@ %d", [NSThread currentThread], 0);
    });
}

这里必须要先点击button1,然后再点击button2,这个时候sem信号量的资源才是可用的。

dispatch_semaphore_wait 可以自定义延迟时间

还有给代码设定延迟时间也是经常使用的

    dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(<#delayInSeconds#> * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
        <#code to be executed after a specified delay#>
    });

dispatch_get_global_queue 使用全局信号量还可以有效的使用手机中的多核资源。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值