互斥是多处理器程序设计中最常见的一种协作方式。我们将某一资源放入临界区内:某个时刻仅能被一个线程执行,称这样的特征为互斥。实现互斥的标准方法就是采用一个具有以下接口的ILock对象。

public interface ILock 
{
    void setlock();
    void unlock();
}

public class Counter
{
    private int _value;
    private ILock _lock;

public int getAndIncrement()
    {
         _lock.setlock();
        try
        {
           int temp = _value;
           _value = temp + 1;
           return _value;
        }
        finally
        {
            _lock.unlock();
        } 
    }
}

一个线程若执行了setlock()方法调用,则称该线程获得一个锁(或称上锁);若执行了unlock()方法调用,则称该线程释放这个锁(或称开锁)。上面共享计数器的实现中,就是使用ILock域来保证对象的互斥特性。线程必须按照指定的方式调用setlock()和unlock()。如果一个线程满足下列条件,则称它是良构的:
1.一个临界区只和一个唯一的ILock对象相关联。
2.线程准备进入临界区时调用该对象的setlock()方法。
3.当线程离开临界区时调用unlock()方法。

转载于:https://www.cnblogs.com/pennant/archive/2009/09/29/1576150.html

《多处理器编程的艺术》读书笔记(2)--- 互斥相关推荐

  1. 并发编程的艺术 读书笔记

    第一章 并发编程的挑战 1. 单核CPU分配运行时间给各个线程,实现多线程执行代码. 举例:看英文书时某个单词不会,先记住看到书的页数和行数,然后去查单词,查完回到看书状态,相当于上下文切换. 2. ...

  2. JAVA并发编程的艺术-读书笔记

    1.并发编程的挑战 多线程并不一定能带来性能提升,相反过多的线程导致线程创建和上下文切换有时会比单线程性能更低 无锁并发编程:根据数据id进行取模,不同的线程处理不同段的数据 死锁:资源互相等待,线程 ...

  3. 《Java并发编程的艺术》笔记

    <Java并发编程的艺术>笔记 第1章 并发编程的挑战 1.1 上下文切换 CPU通过时间片分配算法来循环执行任务,任务从保存到再加载的过程就是一次上下文切换. 减少上下文切换的方法有4种 ...

  4. 《Java多线程编程核心技术》读书笔记

    为什么80%的码农都做不了架构师?>>>    <Java多线程编程核心技术>读书笔记. ###第一章 Java多线程技能 使用Java多线程两种方式. 继承Thread ...

  5. 《Java 并发编程实战》--读书笔记

    Java 并发编程实战 注: 极客时间<Java 并发编程实战>–读书笔记 GitHub:https://github.com/ByrsH/Reading-notes/blob/maste ...

  6. 《Java编程思想》读书笔记 第十三章 字符串

    <Java编程思想>读书笔记 第十三章 字符串 不可变String String对象是不可变的,每一个看起来会修改String值的方法,实际上都是创建一个全新的String对象,以及包含修 ...

  7. 《编程珠玑》 读书笔记

    <编程珠玑> 读书笔记 娄雨禛 PB16060356 准确的问题描述 很多时候,我们总是过度关注了解决问题所用的巧妙算法,而将问题本身的重要性忽视.当我们拿到一个问题时,应当反复研读问题的 ...

  8. 《javascript面向对象编程指南》读书笔记

    <javascript面向对象编程指南>读书笔记 <javascript面向对象编程指南>读书笔记 第一章 面向对象的JavaScript 第二章 基本数据类型与流程控制 变量 ...

  9. 与孩子一起学编程python_与孩子一起学编程(Python读书笔记3)

    第十一章 嵌套与可变循环 Python 3.X里 print()函数默认是自动换行的,所以本章代码会有很多问题,实际上 print()函数里有一个默认参数 end, 默认情况下: end= " ...

  10. 《Java编程思想》读书笔记

    前言:三年之前就买了<Java编程思想>这本书,但是到现在为止都还没有好好看过这本书,这次希望能够坚持通读完整本书并整理好自己的读书笔记,上一篇文章是记录的第十七章到第十八章的内容,这一次 ...

最新文章

  1. HP-UX crontab: you are not authorized to use cron
  2. QTableWidget表头样式
  3. CNN目标检测(二):YOLO
  4. 前后端分离+本地服务实时刷新+缓存管理+接口proxy+静态资源增量更新+各种性能优化+上线运维发布——gulp工作流搭建...
  5. nmon安装为什么重启mysql_Nmon的安装及使用
  6. 数据可视化(BI报表的开发)第三天
  7. java 减少内存_java-减少应用程序内存占用
  8. 拓端tecdat:Python金融时间序列模型ARIMA 和GARCH 在股票市场预测应用
  9. python string 编解码(encode b64encode)
  10. 计算机不能删除用户,删除用户时提示无法在内置账户上运行此操作 -电脑资料...
  11. 机器视觉镜头的计算方法
  12. 等级考试三级(分形盒)
  13. 22计算机考研上岸个人经验近万字分享(11408初试360分)
  14. DTOJ 4745. 进制转换
  15. 撤回的消息服务器还可以看到,微信消息被撤回,居然还能看到!原来还有11个你不知道...
  16. 基于dataX的数据同步平台搭建
  17. 感受Google的汉英翻译能力
  18. 数据销毁,对于数据中心运营意味着什么?
  19. Palindrome Permutation
  20. 华为OD机试 - 字符串分割

热门文章

  1. Eclipse的安装与使用
  2. Oracle Study之--Oracle 11g RAC故障(Failed to create or upgrade OLR)
  3. iOS 开发判断手机型号
  4. 用MyEclipse自带工具生成WebService客户端代码
  5. C语言课程设计—图书管理系统
  6. Phpcms与ucenter整合系统设置
  7. 【拒绝一问就懵】之Activity的启动流程
  8. 全国各省市直辖市软考机构联系方式(办公电话、网址、联系邮箱)
  9. 自定义Seekbar拖动条式样
  10. Microsoft 用户体验虚拟化 UE-V 1.0 RC 发布