美文网首页Swift开发Swift
Swift常用的互斥锁

Swift常用的互斥锁

作者: iOS_zy | 来源:发表于2021-06-08 14:05 被阅读0次

@synchronized是OC 中的线程互斥锁方法。Swift 对应使用 objc_sync_enter(self) 和objc_sync_exit(self)。
方法中的参数只能使 self,使用其它的不能达到互斥锁的目的。

@objc private func remove() {
        print("\(Thread.current)::\(array.count)")
        // 互斥锁
        objc_sync_enter(self)
        while array.count > 0 {
            array.removeLast()
            print("\(Thread.current)::\(array.count)")
        }
        print("\(Thread.current)::\(array.count)")
        objc_sync_exit(self)
    }

另外用信号量也比较好用,同样能达到互斥的目的
dispatch_semaphore_t是属于GCD里面的东西,dispatch_semaphore_t 和前面@synchronized一样都是OC的写法,在Swift中也不是这样写的,全部的内容都是在DispatchSemaphore中,信号量量 >=0 时候不会阻塞当前线程。信号量小于 0 时候回阻塞当前线程。wait() 信号量减1,signal() 信号量加1
DispatchSemaphore ,可以设置锁的失效时间。和初始信号量

class Test {
    // value >= 0 可以执行;每次 wait(), 信号量 -1 ;每次 signal() 信号量 + 1;
    let semaphare = DispatchSemaphore(value: 1)

    private var array: [Int] = []
    init() {
        for i in 0..<100 {
            array.append(i)
        }
    }
    func start() {
        DispatchQueue.global().async {
            self.remove()
        }
        DispatchQueue.global().async {
            self.remove()
        }
    }

    @objc private func remove() {
        print("\(Thread.current)::\(array.count)")
        // wait() 执行后信号量 -1;因为初始化为 1,减一后为 0,所以可以继续执行。
        // 如果初始信号量为0,减一后为 -1,则立即阻塞当先线程
        semaphare.wait()
        print("start")
        while array.count > 0 {
            array.removeLast()
            print("\(Thread.current)::\(array.count)")
        }
        print("\(Thread.current)::\(array.count)")
        semaphare.signal()
    }
}
let t = Test()
DispatchQueue.global().async {
    t.start()
}

相关文章

  • Swift常用的互斥锁

    @synchronized是OC 中的线程互斥锁方法。Swift 对应使用 objc_sync_enter(sel...

  • swift中互斥锁

    在swift中,互斥锁如何写oc中的互斥锁:@synchronized(self) { //需要执行的代码块 } ...

  • C++11多线程互斥锁`mutex`,`unique_lock`

    C++11多线程互斥锁mutex,unique_lock,lock_guard 互斥锁   互斥锁是线程中常用的线...

  • 多线程--锁

    本文主要介绍: 互斥锁 递归锁 读写锁 自旋锁 分布锁 条件变量 信号量 栅栏 一些常用锁的性能。 1. 互斥锁(...

  • Swift 中的 Lock

    // Lock // OC 中最常用的锁是 互斥锁, 即 @synchronized /* @synchroniz...

  • 20.线程同步

    1.mutex互斥锁 常用的互斥锁函数 代码实现,两个线程交替计算 2.条件变量 常用函数 生产者消费者模型 3....

  • Linux线程同步

    Linux下提供了多种方式来处理线程同步,最常用的是互斥锁、条件变量和信号量。 Linux线程同步-----互斥锁...

  • 线程同步与互斥

    Linux--线程编程 多线程编程-互斥锁 线程同步与互斥 互斥锁 信号量 条件变量 互斥锁 互斥锁的基本使用...

  • Golang 锁的相关知识

    Golang锁分类:互斥锁(Mutex)、读写锁(RWMutex)。 互斥锁 在编写代码中引入了对象互斥锁的概念,...

  • mutex与spinlock的区别和应用场景

    这篇讲讲互斥锁(mutex)与自旋锁(spinlock)的差异,以及何种场景应该使用何种锁。mutex是最经常用到...

网友评论

    本文标题:Swift常用的互斥锁

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