原子操作一、添写到文件 早期的UNIX的open函数里面,不支持O_APPEND的选项。所以要追写到文件结尾处,必须先利用lseek把文件偏移量移到文件的结尾处,再进行write操作。 如果当前进程A刚执行完lseek后,系统进程调度作用切换到了另一个进程B,进程B对同一个文件进行了写操作。进程B写...
分类:
其他好文 时间:
2014-06-19 08:58:03
阅读次数:
318
1、问题由来
类A直接依赖于类B,假如要将类A修改为依赖类C,则必须通过修改类A的代码来达成。这种场景下,类A一般是高层模块,负责复杂的业务逻辑。类B和C是底层模块,负责基本的原子操作。假如修改类A,将会给程序带来不必要的风险。而遵循依赖倒置原则的程序设计可以解决这一问题。2、什么是依赖倒置原则 ....
分类:
其他好文 时间:
2014-06-12 13:56:54
阅读次数:
315
本文提供Delphi下一个基于原子操作的无锁队列,简易高效。适用于多线程大吞吐量操作的队列。可用于Android系统和32,64位Windows系统。
分类:
其他好文 时间:
2014-06-05 17:28:21
阅读次数:
410
进程管理中最基本的功能。创建,终止,状态转换操作有OS内核中的原语实现的,原语由若干指令组成,是‘原子操作‘,所有动作要么做,要么不做,不允许中断,在管态下执行,常驻内存进程创建:
进程图是描述有进程家族关系的有向树 进程间关系:子进程可以继承父进程所拥有的资源 引起进程创建事件: 1,、用户登录;...
分类:
其他好文 时间:
2014-05-31 01:18:59
阅读次数:
321
1. 既然比较两者性能, 必然锁的区域极小, 可以使用原子操作代替2. 若这个极小区域就是操作的全部,
只是频繁被调用, 则看并发的线程数量, 在并发量小时, 线程冲突小, 而一个 yield 可以保证较长时间内其他线程不来打搅, 获得的是一个类似批处理的结果,
性能较原子操作高; 自然, 若仅仅只...
分类:
其他好文 时间:
2014-05-27 02:24:26
阅读次数:
168
CAS,当oldVal与expected相同时,将oldVal更新为newVal,原子操作ABA problem:when a location is read
twice, has the same value for both reads, and "value is same“ is used...
分类:
其他好文 时间:
2014-05-26 16:06:53
阅读次数:
217
原子操作:一个或者多个指令的序列临界区:一段代码,在该代码中进程将访问该共享资源死锁:两个或者两个以上的进程因其中的每个进程都在等待其他进程做完事情而不能继续执行活锁:两个或者两个以上的进程为了响应其他进程中的变化而持续改变自己的状态但是不做有用的工作互斥:当一个进程在一个临界区访问共享资源时,其他...
分类:
其他好文 时间:
2014-05-25 18:47:34
阅读次数:
235
前段时间研究过一阵子无锁化编程。刚写了几个简单的程序,来验证了下自己学到的一些概念。
测试场景:假设有一个应用:现在有一个全局变量,用来计数,再创建10个线程并发执行,每个线程中循环对这个全局变量进行++操作(i++),循环加2000000次。
所以很容易知道,这必然会涉及到并发互斥操作。下面通过三种方式来实现这种并发操作。并对比出其在效率上的不同之处。
......
通过编程测试及测试得出结论:
1、如果是想用全局变量来做统计操作。而又不得不考虑多线程间的互斥访问的话,最好使用编译器支持的原子操作函...
分类:
其他好文 时间:
2014-05-15 00:17:24
阅读次数:
390