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