引言:本篇通过对open函数的讨论,引入原子操作,多进程通信(共享文件描述符)和内核相关的数据结构。还会讨论集中常见的文件IO控制函数,包括:dup和dup2sync,fsync和fdatasyncfcntlioctl/dev/fd一、文件共享这里所说的文件共享主要指的是进程间共享打开的文件。这一节...
分类:
其他好文 时间:
2015-02-15 23:03:06
阅读次数:
242
一. 何谓"原子操作":原子操作就是: 不可中断的一个或者一系列操作, 也就是不会被线程调度机制打断的操作, 运行期间不会有任何的上下文切换(context switch).二. 为什么关注原子操作?1. 如果确定某个操作是原子的, 就不用为了去保护这个操作而加上会耗费昂贵性能开销的锁. - (巧妙...
分类:
其他好文 时间:
2015-02-15 12:00:10
阅读次数:
184
引言: Unix系统中主要的文件操作包括:openreadwritelseekclose unbuffered IO和standard I/O相对应,后面的章节我们会讨论这两者的区别。 在讨论open函数的时候,会引入原子操作,多进程通信(共享文件描述符)和内核相关的数据结构。一,文件描述符 ...
分类:
其他好文 时间:
2015-02-13 13:17:05
阅读次数:
275
64位原子操作的加法的实现。只有看汇编才能理解
1100306:80b5ef20 :
1100307-80b5ef20: 53 push %ebx
1100308-80b5ef21: 89 d8 mov %ebx,%eax
1100309-80b5ef23: 89 ca ...
分类:
其他好文 时间:
2015-02-12 20:12:12
阅读次数:
289
上一篇《秒杀多线程第三篇原子操作 Interlocked系列函数》中介绍了原子操作在多进程中的作用,如今来个复杂点的。这个问题涉及到线程的同步和相互排斥,是一道很有代表性的多线程同步问题,假设能将这个问题搞清楚,那么对多线程同步也就打下了良好的基础。程序描写叙述:主线程启动10个子线程并将表示子线程...
分类:
编程语言 时间:
2015-02-10 21:27:53
阅读次数:
263
Atomic功能是提供简单的类保持原始值,并且提供对其执行原子操作;Atomic是线程安全的,类型的实现比较简单,就是通过各种措施保证变量的操作达到原子操作,有一点需要注意Atomic使用的时候只支持长度是32位或者64位的类或者类型,其他类型会出现问题。这里对类中用到的一些系统函数进行一些说明.....
分类:
其他好文 时间:
2015-02-07 14:31:38
阅读次数:
240
http://blog.sina.com.cn/s/blog_6f5b220601013zw3.html非常好的原子操作,不用加锁:__sync_fetch_and_addGCC 提供的原子操作gcc从4.1.2提供了__sync_*系列的built-in函数,用于提供加减和逻辑运算的原子操作。其声...
分类:
编程语言 时间:
2015-02-03 12:44:55
阅读次数:
195
同步机制可以保证原子操作和内存可见性,但是同步机制对变量的访问性能是我们不得不考虑的问题,java语言提供了一种弱同步机制,volatile变量。
它的原理大致是这样的,当把变量声明为volatile类型后,编译器与运行时都会注意到这个变量是共享的,因此不会将变量上的操作与其他内存操作一起重排序。volatile变量不会被缓存在寄存器或者对其他处理器不可见的地方,因此在读取volatile类型的...
分类:
编程语言 时间:
2015-02-01 23:21:33
阅读次数:
316
上一篇《秒杀多线程第三篇原子操作 Interlocked系列函数》中介绍了原子操作在多进程中的作用,如今来个复杂点的。这个问题涉及到线程的同步和相互排斥,是一道很有代表性的多线程同步问题,假设能将这个问题搞清楚,那么对多线程同步也就打下了良好的基础。程序描写叙述:主线程启动10个子线程并将表示子线程...
分类:
编程语言 时间:
2015-02-01 13:23:20
阅读次数:
167
上一篇《秒杀多线程第三篇原子操作 Interlocked系列函数》中介绍了原子操作在多进程中的作用,如今来个复杂点的。这个问题涉及到线程的同步和相互排斥,是一道很有代表性的多线程同步问题,假设能将这个问题搞清楚,那么对多线程同步也就打下了良好的基础。程序描写叙述:主线程启动10个子线程并将表示子线程...
分类:
编程语言 时间:
2015-01-29 19:24:40
阅读次数:
170