美文网首页
多线程异步安全,安全锁的问题

多线程异步安全,安全锁的问题

作者: 上帝是个女孩丶 | 来源:发表于2017-06-29 12:05 被阅读18次

本篇文章主要介绍多线程在异步时候的内部代码调用。以及加锁时候代码的调用。比较明显的使用地点是数据库操作。资源竞争。

首先我们常用到的锁有以下几种:

@synchronizad、atomic、NSLook、NSRecursiveLock(递归锁)


接下来先逐一简单介绍一下这些个线程锁:

1. @synchronizad

这个是常规的局部代码锁。使用方式:

```@synchronized(lock){

     A代码

}```

```@synchronized(lock){

     B代码

}```

lock 是id类型,只要求唯一性就可以。

加密后相当于队列效果,执行完A之后才会执行B。即便是两个异步线程。

2.aotomic

这个属于属性锁,也就是原子操作。一个@property使用了这个关键字之后,他的setter方法会自动枷锁。加锁方式用的就是@synchronizad。  但是这个属性不要随便乱用,第一他的性能消耗太高,是noaotomic的20倍差不多。而且,仅仅对setter方法加锁是有漏洞的,具体例子就是读取和set的顺序问题。

3.NSLook

有点类似于@synchronized  保证多线程代码安全

lock = [[NSLock alloc] init];

[lock lock];

//代码块

[lock unlock];

4.NSCondition

条件锁,只有达到条件之后,才会执行锁操作

BOOL canLock = [conditionLock tryLockWhenCondition:condition];

5.NSRecursiveLock  

递归锁主要防止崩溃,一个代码块里多次加锁

比如:自身调用自身加锁。

下面介绍一下多线程中加锁:先贴几行代码:

待更新。。。

相关文章

  • 多线程异步安全,安全锁的问题

    本篇文章主要介绍多线程在异步时候的内部代码调用。以及加锁时候代码的调用。比较明显的使用地点是数据库操作。资源竞争。...

  • 多线程异步安全,安全锁的问题

    本篇文章主要介绍多线程在异步时候的内部代码调用。以及加锁时候代码的调用。比较明显的使用地点是数据库操作。资源竞争。...

  • 18_线程安全_同步机制_锁

    多线程访问共享数据 造成安全问题 造成安全问题的原因 ==================锁 解决线程安全的方式 ...

  • 线程安全与锁

    IOS编码中,锁的出现其实是因为多线程安全的问题。那么,问题来了,什么是线程安全?为什么锁可以解决线程安全问题?单...

  • 多线程(四) @synchronized

    多线程出现最多的就是安全问题,解决多线程安全问题就是加锁。锁的种类有很多,每种锁使用场景、性能上都有所不同,我们写...

  • iOS中的八大锁解析与使用

    线程安全:多线程操作共享数据,不会造成意想不到的问题锁的意义:为了线程安全 锁的分类 自旋锁 busy-waiti...

  • 并发编程专题-04共享模型-无锁(乐观锁)

    1. 无锁和有锁解决线程安全问题 1.1 非线程安全实现 在多线程的环境下,对共享资源的访问存在线程安全问题 1....

  • iOS的线程安全与锁

    在iOS编码中,锁的出现其实是因为多线程会出现线程安全的问题。那么,问题来了,什么是线程安全?为什么锁可以解决线程...

  • iOS开发常用的几种锁!

    前言 开发中引入了异步和多线程的来提高程序性能,也就意味着线程安全成为了多线程的一个障碍,因此线程锁应运而生,而锁...

  • iOS常用的几种锁

    前言 开发中引入了异步和多线程的来提高程序性能,也就意味着线程安全成为了多线程的一个障碍,因此线程锁应运而生,而锁...

网友评论

      本文标题:多线程异步安全,安全锁的问题

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