美文网首页
信号量DispatchSemaphore,wait,singal

信号量DispatchSemaphore,wait,singal

作者: 生命不止运动不息 | 来源:发表于2023-07-01 14:53 被阅读0次

DispatchSemaphore是一个用于控制并发访问的同步原语,它可以控制同时执行的任务数量。下面是DispatchSemaphore的基本用法:

1、创建DispatchSemaphore对象并指定初始值:
let semaphore = DispatchSemaphore(value: 5)

上述代码创建了一个初始值为5的DispatchSemaphore对象。

2、在需要控制并发的代码块前调用wait()方法获取一个信号量:
semaphore.wait()

如果信号量的值大于零,则会减少信号量的值并继续执行。如果信号量的值为零,则会阻塞当前线程,直到有一个信号量可用为止。

3、在任务完成后调用signal()方法释放一个信号量:
semaphore.signal()

这会增加信号量的值,以便其他等待的任务可以继续执行。

通过适当地调用wait()和signal()方法,可以实现对并发任务数量的控制。

示例代码如下,演示了如何使用DispatchSemaphore来控制并发执行的任务数量为3:

let semaphore = DispatchSemaphore(value: 3)

for i in 1...9 {
    DispatchQueue.global().async {
        semaphore.wait()
        print("Start task \(i)")
        Thread.sleep(forTimeInterval: 2) // 模拟耗时任务
        print("Finish task \(i)")
        semaphore.signal()
    }
}

打印结果如图:


截屏2023-07-02 14.51.33.png

在上述代码中,我们创建了一个初始值为3的DispatchSemaphore对象。然后,我们使用一个循环来创建10个任务,每个任务都会在执行前调用semaphore.wait()获取一个信号量,并在执行完成后调用semaphore.signal()释放一个信号量。

这样,由于信号量的初始值为3,同时只有3个任务可以执行,其他任务会在调用wait()时等待。一旦有任务完成并调用了signal(),等待的任务就可以继续执行。

相关文章

  • DispatchSemaphore

    /// 信号量对象class DispatchSemaphore { }参考: https://blog.csdn...

  • Dispatch

    1. 定时执行 2. DispatchSemaphore信号量 3. concurrent并发 并发的快速发起: ...

  • 第二章 信号量(1)

    整形信号量 记录型信号量 这些wait 都是-1 signal都是+1 不同的是 整型信号量wait先判断小于0然...

  • 在 iOS 中使用整型信号量

    在 Dispatch 框架中为 swift 提供了一个信号量类: DispatchSemaphore.可以使用 s...

  • Swift DispatchSemaphore信号量

    定义1、信号量:就是一种可用来控制访问资源的数量的标识,设定了一个信号量,在线程访问之前,加上信号量的处理,则可告...

  • Swift DispatchSemaphore信号量

    https://www.jianshu.com/p/bc1687a1f840[https://www.jiansh...

  • 简单易懂的DispatchSemaphore

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

  • Swfit - Dispath信号量枷锁

    创建了一个信号量DispatchSemaphore(value: 1),一次只能执行一次,在需要上锁的地方lock...

  • 信号量

    整形信号量 wait(s){while(s<=0)s--; } signal{s++; } 记录型信号量 type...

  • iOS GCD信号量的使用

    什么是信号量 信号量是一种特殊的变量,访问具有原子性。 当信号量大于0时执行wait操作信号量会减1, 当信号量为...

网友评论

      本文标题:信号量DispatchSemaphore,wait,singal

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