zoukankan      html  css  js  c++  java
  • 信号量与并发控制

    代码1 - 未使用信号量控制并发:

    #import "ViewController.h"
    
    @interface ViewController ()
    
    @end
    
    @implementation ViewController
    
    - (void)viewDidLoad {
        [super viewDidLoad];
        
        dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
            for (NSUInteger i = 0;  i < 10; ++i) {
                NSLog(@"Task - 1");
            }
        });
        
        dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
            for (NSUInteger i = 0;  i < 10; ++i) {
                NSLog(@"Task - 2");
            }
        });
    }
    
    @end

    输出:

    Task - 1
    Task - 2
    Task - 1
    Task - 2
    Task - 1
    Task - 2
    Task - 1
    Task - 2
    Task - 1
    Task - 2
    Task - 1
    Task - 2
    Task - 1
    Task - 2
    Task - 1
    Task - 2
    Task - 1
    Task - 2
    Task - 1
    Task - 2

    代码 - 使用信号量控制并发:

    #import "ViewController.h"
    
    @interface ViewController ()
    
    @property (nonatomic, strong) dispatch_semaphore_t semaphore;
    
    @end
    
    @implementation ViewController
    
    - (void)viewDidLoad {
        [super viewDidLoad];
        
        self.semaphore = dispatch_semaphore_create(1);
    
        dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
            dispatch_semaphore_wait(self.semaphore, DISPATCH_TIME_FOREVER);
            for (NSUInteger i = 0;  i < 10; ++i) {
                NSLog(@"Task - 1");
            }
            dispatch_semaphore_signal(self.semaphore);
        });
        
        dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
            dispatch_semaphore_wait(self.semaphore, DISPATCH_TIME_FOREVER);
            for (NSUInteger i = 0;  i < 10; ++i) {
                NSLog(@"Task - 2");
            }
            dispatch_semaphore_signal(self.semaphore);
        });
    }
    
    @end

    输出:

    Task - 1
    Task - 1
    Task - 1
    Task - 1
    Task - 1
    Task - 1
    Task - 1
    Task - 1
    Task - 1
    Task - 1
    Task - 2
    Task - 2
    Task - 2
    Task - 2
    Task - 2
    Task - 2
    Task - 2
    Task - 2
    Task - 2
    Task - 2
  • 相关阅读:
    魔方
    js烟花特效
    面试cookie
    扩展日期插件
    通过javascript实现1~100内能同时被2和3整除的数并生成如下表格
    用三或四个个div标签实现工字效果
    2015_WEB页面前端工程师_远程测题_东方蜘蛛_1
    js公有、私有、静态属性和方法的区别
    Docker libnetwork(CNM)设计简介
    kubernetes,Docker网络相关资料链接
  • 原文地址:https://www.cnblogs.com/xwoder/p/7460783.html
Copyright © 2011-2022 走看看