zoukankan      html  css  js  c++  java
  • 线程安全的实现方法

    线程安全的实现方法

    i. 互斥同步

    实现方式:临界区(critical section)、互斥量(Mutex)、信号量(Semaphore)

    1. Java中最基本的互斥手段就是:synchronized关键字,经过编译后,会在同步代码前后分别形成monitorenter和monitorexit两个字节码,这两字节码都需要一个reference类型的参数指明要锁定和解锁的对象。如果synchronized指明对象参数,那就是这个对象的reference;若没指明,那就根据修饰的是实例方法还是类方法,去取相应的对象实例或者Class对象来作为锁对象。(就是synchronized后参数)(synchronized是重量级操作)

    2. Java.util.concurrent包中的重入锁(ReentrantLock)来实现同步。新加特性:

    a) 等待可中断:长期持有锁线程不释放时,等待进程可以选择放弃。

    b) 可实现公平锁:(synchronized和lock默认都是非公平的,lock可以通过构造函数中的布尔值要求使用公平锁)

    c) 锁可以绑定多个条件:通过多次调用newCondition()方法即可。

    3. 二者区别:lock表现为API层面的互斥锁(lock()和unlock()方法需要配合try/finally语句块来完成)。Synchronized变现为原生语法层面的互斥锁。

    ii. 非阻塞同步:基于冲突检测的乐观并发策略。(atomicInteger等)

    iii. 无同步方案

    1. 可重入代码(Reentrant Code)

    2. 线程本地存储(Thread Local Storage)
  • 相关阅读:
    如何在vim中同时编辑多个文件
    Windows操作系统架构
    驱动中PAGED_CODE的作用
    Process Hacker源码中的用户态hook的做法
    IO Processing
    Device Drivers
    Windows IO System
    how to catch error in make error message
    分析/proc/[pid]/maps中的各个内存区域的大小
    boost::shared_ptr
  • 原文地址:https://www.cnblogs.com/blythe/p/7536558.html
Copyright © 2011-2022 走看看