美文网首页
iOS面试 自己实现一个自旋锁

iOS面试 自己实现一个自旋锁

作者: iOS鑫 | 来源:发表于2021-03-09 15:45 被阅读0次

自旋锁的原理

作为一个开发者,有一个学习的氛围跟一个交流圈子特别重要,这是一个我的iOS开发交流群:130595548,不管你是大牛还是小白都欢迎入驻 ,让我们一起进步,共同发展!(群内会免费提供一些群主收藏的免费学习书籍资料以及整理好的几百道面试题和答案文档!)

如果共享数据已经有其他线程加锁了,线程会以死循环的方式等待锁,一旦被访问的资源被解锁,则等待资源的线程会立即执行。

分析

  • 死循环
  • 等待不休眠
  • 解锁立即执行

代码

struct LYSpinLock{
    var flag = 0

    mutating func lock(){
        while (self.setFlag() != 0) {
        }
    }
    mutating func unlock(){
        flag = 0
    }
    private mutating func setFlag()->Int{
        if flag == 0{
            flag = 1
            return 0
        }else{
            return 1
        }
    }
}

应用

//全局变量
    var spinlock = LYSpinLock.init(flag: 0)

//两个线程调用
          DispatchQueue.global().async {
            self.action()
        }
        DispatchQueue.global().async {
            self.action()
        }

//具体加锁代码
     func action(){

        while true {

            spinlock.lock()

            if num >= 100{
                spinlock.unlock()

                return
            }
            num += 1

            print("\(num)----\(Thread.current)")

            spinlock.unlock()

        }

    }

效果

作为一个开发者,有一个学习的氛围跟一个交流圈子特别重要,这是一个我的iOS开发交流群:130595548,不管你是大牛还是小白都欢迎入驻 ,让我们一起进步,共同发展!(群内会免费提供一些群主收藏的免费学习书籍资料以及整理好的几百道面试题和答案文档!)

相关文章

  • iOS面试 自己实现一个自旋锁

    自旋锁的原理 作为一个开发者,有一个学习的氛围跟一个交流圈子特别重要,这是一个我的iOS开发交流群:1305955...

  • iOS面试 自己实现一个自旋锁

    面试的时候被问到了,突然有点懵逼,遂自己研究实现一下 自旋锁的原理 如果共享数据已经有其他线程加锁了,线程会以死循...

  • 关于自旋锁

    自旋锁是什么? spinlock,不断的自旋(自我循环)尝试获得锁。参考文档:Java中的自旋锁 自旋锁的实现 自...

  • 多线程笔记-锁(待续)

    概述 CAS算法 一般情况下是一个自旋操作,即不断的重试 自旋锁 《 面试必备之深入理解自旋锁》[https://...

  • iOS 自己实现一个递归自旋锁

    什么是自旋锁? 是指当一个线程在获取锁的时候,如果锁已经被其它线程获取,那么该线程将循环等待,然后不断的判断锁是否...

  • 阅读的好文章

    介绍什么是自旋锁, 从原始自旋锁到CLH锁和MCS锁多线程自旋锁实现方案 codis貌似不支持主备有点可惜codi...

  • 线程锁

    1.常见的锁包括:互斥锁,自旋锁。 2.互斥锁是指锁的类型,自旋锁是指锁的实现方式。 3.互斥锁:当上...

  • iOS面试题与核心基础之线程同步(锁,串行队列,信号量,@syn

    锁 iOS多线程锁有两类 自旋锁 和 互斥锁自旋锁与互斥锁比较类似,它们都是为了解决对某项资源的互斥使用。资源已...

  • 锁 iOS中锁只分为两大类: 自旋锁(spin) :自旋锁其实是while轮询,避免了进程上下文的调度开销,因此对...

  • 聊聊高并发(七)实现几种自旋锁(二)

    在聊聊高并发(六)实现几种自旋锁(一) 这篇中实现了两种基本的自旋锁:TASLock和TTASLock,它们的问题...

网友评论

      本文标题:iOS面试 自己实现一个自旋锁

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