博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
iOS自旋锁
阅读量:6804 次
发布时间:2019-06-26

本文共 1341 字,大约阅读时间需要 4 分钟。

自旋锁是专为防止多处理器并发而引入的一种锁,它在中大量应用于等部分(对于单处理器来说,防止中断处理中的并发可简单采用关闭中断的方式,即在中关闭/打开中断标志位,不需要自旋锁)。

自旋锁,和互斥锁类似,都是为了保证线程安全的锁。但二者的区别是不一样的,对于互斥锁,当一个线程获得这个锁之后,其他想要获得此锁的线程将会被阻塞,直到该锁被释放。但自旋锁不一样,当一个线程获得锁之后,其他线程将会一直循环在哪里查看是否该锁被释放。所以,此锁比较适用于锁的持有者保存时间较短的情况下。

部分代码如下:

以下代码要导入以下头文件

#import 
#import
#import
复制代码
// 自旋锁- (void)OSSpinLock {    //    spinLock = OS_SPINLOCK_INIT;    //    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{    //        NSLog(@"线程1 准备上锁");    //        OSSpinLockLock(&spinLock);    //        sleep(4);    //        NSLog(@"线程1");    //        OSSpinLockUnlock(&spinLock);    //        NSLog(@"线程1 解锁成功");    //        NSLog(@"----------------------------------");    //    //    });    /*     // iOS 10以后用下面的 解决了优先级反转问题     //    os_unfair_lock_t unfairLock = &(OS_UNFAIR_LOCK_INIT);     //    os_unfair_lock_lock(unfairLock);     //    os_unfair_lock_unlock(unfairLock);     */        os_unfair_lock_t unfairLock = &(OS_UNFAIR_LOCK_INIT);    NSLog(@"线程1 准备上锁");    os_unfair_lock_lock(unfairLock);    sleep(4);    NSLog(@"线程1");    os_unfair_lock_unlock(unfairLock);    NSLog(@"线程1 解锁成功");    NSLog(@"---------------------------------------");}复制代码

YYKit 作者 @ibireme 的文章也有说这个自旋锁存在优先级反转问题,具体文章可以戳 。

github: https://github.com/soliloquy-local/OSSpinLock.git

转载地址:http://bknwl.baihongyu.com/

你可能感兴趣的文章
linux笔记 2-11 系统恢复
查看>>
windows下kafka+ELK的日志系统
查看>>
未来时代
查看>>
正则表达式总结
查看>>
ImageView的属性android:scaleType,即ImageView.setSca...
查看>>
java 计算指数函数log2(X)的值
查看>>
Greenplum -- 最全分区表操作
查看>>
Linux交互命令工具expect与自动切换登录用户
查看>>
热烈祝贺广州固润光电参加2017深圳光博会取得圆满成功
查看>>
h5实体
查看>>
模板字符串
查看>>
使用WebDriver遇到的一些问题汇总
查看>>
AI:你们是不是在等一顶红帽子?
查看>>
六周第一次课 9.1 正则介绍_grep上 9.2 grep中 9.3 grep下
查看>>
我的友情链接
查看>>
华为 ACL 问题
查看>>
RHEL设置主机名
查看>>
Java原始的压缩和解压
查看>>
ORACLE系统表和视图说明
查看>>
你在为谁工作
查看>>