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
  • 相关阅读:
    C++--第25课
    C++--第24课
    C++--第23课
    C++--第22课
    C++--第21课
    C++--第20课
    C++--第19课
    C++--第18课
    C++--第17课
    Windows程序设计学习笔记(1):一个简单的windows程序
  • 原文地址:https://www.cnblogs.com/xwoder/p/7460783.html
Copyright © 2011-2022 走看看