一、线程安全

  • 在平时的开发中经常使用到多线程,在使用多线程的过程中,难免会遇到资源竞争的问题,那么怎么来避免出现这种问题呢?
  • 当一个线程访问数据的时候,其他的线程不能对其进行访问,直到该线程访问完毕。简单来讲就是在同一时刻,对同一个数据操作的线程只有一个。只有确保了这样,才能使数据不会被其他线程影响。而线程不安全,则是在同一时刻可以有多个线程对该数据进行访问,从而得不到预期的结果。
  • 比如写文件和读文件,当一个线程在写文件的时候,理论上来说,如果这个时候另一个线程来直接读取的话,那么得到的结果可能是无法预料的。
  • 通常使用锁的机制来保证线程安全,即确保同一时刻只有同一个线程来对同一个数据源进行访问。

二、锁的使用

① 互斥锁
  • 互斥锁是一种用于多线程编程中,防止两条线程同时对同一公共资源(例如全局变量)进行读写的机制,该目的是通过将代码切成一个个临界区而达成。
  • 互斥锁主要是@synchronized、NSLock、pthread_mutex。
  • @synchronized
    • @synchronized 是 iOS 中最常见的锁,用法很简单:
  - (void

iOS之深入解析保证线程安全的“锁”的使用和性能分析相关推荐

  1. jstack(查看线程)、jmap(查看内存)和jstat(性能分析)命令

    转载自  jstack(查看线程).jmap(查看内存)和jstat(性能分析)命令 1.Jstack  1.1   jstack能得到运行java程序的java stack和native stack ...

  2. 解析ThreadPoolExecutor类是如何保证线程池正确运行的

    摘要:对于线程池的核心类ThreadPoolExecutor来说,有哪些重要的属性和内部类为线程池的正确运行提供重要的保障呢? 本文分享自华为云社区<[高并发]通过源码深度解析ThreadPoo ...

  3. iOS之深入解析Runloop的底层原理

    一.Runloop 简介 ① 什么是 Runloop ? RunLoop 是事件接收和分发机制的一个实现,是线程相关的基础框架的一部分,一个 RunLoop 就是一个事件处理的循环,用来不停的调度工作 ...

  4. iOS之深入解析消息转发objc_msgSend的应用场景

    一.消息转发 现有如下示例: id o = [NSObject new]; [o lastObject]; 执行上面代码,程序会崩溃并抛出以下异常: [NSObject lastObject]: un ...

  5. iOS之深入解析CFRunloop的多线程隐患

    一.前言 如果还不了解 Runloop,请参考我之前的博客:iOS之深入解析Runloop的底层原理. 在苹果官方文档中,声明了 CFRunloop 是线程安全的,但是需要注意的是,Apple 使用了 ...

  6. shiro如何保证session不失效_请问在不加锁的情况下如何保证线程安全?

    概念 compare and swap,解决多线程并行情况下使用锁造成性能损耗的一种机制,CAS操作包含三个操作数--内存位置(V).预期原值(A)和新值(B).如果内存位置的值与预期原值相匹配,那么 ...

  7. MiseringThread.java 解析页面线程

    MiseringThread.java 解析页面线程 http://injavawetrust.iteye.com package com.iteye.injavawetrust.miner;impo ...

  8. iOS中XML解析 (二) libxml2(实例:打印xml内容及存储到数组)

    关联:iOS中XML解析 (一) TBXML (实例:打印xml内容及存储到数组) 关于libxml库的基本使用,在http://xmlsoft.org/网上有文档. 准备工作: project=&g ...

  9. iOS之深入解析Memory内存

    一.前言 iOS 是基于 BSD 发展而来,理解一般的桌面操作系统的内存机制是非常有必要的.在此基础之上,进一步在 iOS 系统层面进行分析,包括 iOS 整体的内存机制,以及 iOS 系统运行时的内 ...

最新文章

  1. perl 编程 - 判断系统进程是否活着的方法
  2. 自动驾驶测试:MIL、SIL、PIL、HIL
  3. python中的lambda匿名函数
  4. 一招教会你处理Flutter中的数据
  5. pythonsys模块介绍_sys 模块介绍 - Clarkhedi的个人空间 - OSCHINA - 中文开源技术交流社区...
  6. 关于java中的位运算
  7. 图像标注,三倍加速:谷歌AI新方案,数据民工的福音 | Demo可玩耍
  8. IPSec之security acl
  9. VS清理中间文件bat脚本
  10. 京东移动端分类页面侧导航栏实现
  11. 计算机毕业设计(69)php小程序毕设作品之疫苗预约小程序系统
  12. 谷歌浏览器反复提示PageOffice安装
  13. 一本好书,若干能源大数据分析论文分享
  14. 菜鸡解析CSS(cascading style sheet)
  15. python中怎样定位字符串中元素的位置_python查找字符串位置
  16. WebForm水印照片
  17. shell脚本使用教程3
  18. 调剂2002年计算机科学与技术,2021-03-24 2021年北京信息科技大学硕士研究生调剂信息...
  19. 玩转SAP-怎样完善MM配置清单?
  20. day31-SHELL编程之CASE语句+函数+正则

热门文章

  1. 三星I9100[4.0 固件ROM] [2012.03.15]万众期待的欧版官方4.0.3完美汉化完美教程
  2. Condition中的transferForSignal()方法的不解
  3. Git 推送到远程仓库
  4. Java面向对象概述
  5. asp.net拦截器
  6. C#静态变量和非静态变量的区别
  7. 找不到using System.Web.Script.Services 的问题
  8. 基于八叉树快速分类的Shear-Warp交互式体绘制算法
  9. 奇安信cdn配置教程_PicGo+jsDelivr+GitHub搭建免费cdn加速的图床
  10. html5水调歌头代码,张惠言的五首《水调歌头》