1. 临界区和竞态条件:

临界区:访问和操作共享数据的代码段;

竞态条件:当有多个线程同时进入临界区时,执行结果取决于线程的执行顺序;

如下述代码,当多个线程同时调用func函数,对共享数据sum进行操作,实际上我们得到的结果则依赖于执行的相对时间;

线程1在a.取出sum值,然后b.对sum+1,然后c.写入sum值,假设线程2在线程1a步骤之后同样取出sum值,并分别进行+1计算,写回sum值,可见,线程1和线程2计算的结果都是1,此时sum值为1;假设线程2在线程1写回数据之后,取出sum值,进行+1,写回操作,此时sum值为2;可见,线程的执行相对时间不同,导致了共享资源出现了不同结果;

int sum = ;

...

void func ()
{
  sum++;
} ...

2. 保护临界区:

为了保护临界区,我们可使用互斥量、读写锁等同步措施,保证同一时间只有一个线程能够进入到临界区,或者同一时间只有一个写线程进入到临界区,从而避免产生竞态条件;

int sum = ;

...

void func ()
{
  lock();
  sum++;
  unlock();
} ...

最新文章

  1. nginx简易教程
  2. xml文件解析(解析以后在RootTableViewController输出)
  3. 《Linux常用命令》笔记
  4. 一个获取指定目录下一定格式的文件名称和文件修改时间并保存为文件的python脚本
  5. Java中OutOfMemoryError(内存溢出)的情况及解决办法
  6. Codeforces 527E Data Center Drama(欧拉回路)
  7. bigdata_hiveserver2报错_thrift
  8. css3制作3d旋转相册
  9. mysql统计类似SQL语句查询次数
  10. idea 右键无java class选项
  11. 在Ubuntu 16.04下安装nodejs
  12. HTML元素 - input type=hidden
  13. 分布式理论(四)—— 一致性协议之 3PC
  14. Oracle EBS OM 已存在的OM订单增加物料
  15. form表单,submit,ajax提交
  16. Python_oldboy_自动化运维之路_线程,进程,协程(十一)
  17. jp@gc - Stepping Thread Group 字段说明
  18. 大数据应用之HBase数据插入性能优化实测教程
  19. ra寄存器定位core
  20. 学习python3

热门文章

  1. O062、NFS Volume Provider(Part I)
  2. day1-css练习[新浪首页顶部栏]
  3. JVM垃圾回收那些事
  4. Java高并发程序设计学习笔记(五):JDK并发包(各种同步控制工具的使用、并发容器及典型源码分析(Hashmap等))
  5. 安装grafna已经grafna对接zabbix
  6. 使用hbuilder打包时,调用地图和相机
  7. 关于PXELINUX的一些重要描述摘录
  8. 无聊开始玩路由器,入门Tomato固件
  9. ssh connection refused 问题
  10. css文字样式与div