一、信号量简介 信号量: 用于管理对资源的访问。 荷兰计算机科学家Edsger Dijkstra提出的信号量概念 是在并发编程领域迈出的重要一步。 信号量是一个特殊的变量, 它只取正数值, 并且程序对其访问都是原子操作。 二、信号量的定义 它是一个特殊变量, 只允许对它进行等待(wait)和发送信号 ...
分类:
系统相关 时间:
2016-06-04 22:02:26
阅读次数:
293
一、引言 UNIX系统中的大多数文件对I/O只需用到5个函数:open/read/write/lseek和close,这些函数都是不带缓冲I/O(Unbuffered I/O)。只要涉及到多个进程间共享资源,原子操作的概念就变得非常重要,后面将介绍:dup/fcntl/sync/fsync和ioct ...
分类:
其他好文 时间:
2016-05-31 00:39:12
阅读次数:
272
1.原子操作 2.临界区概述 临界区:进程中访问临界资源的一段需要互斥执行的代码。 进入区:检查可否进入临界区的一段代码,如可进入,设置相应“正在访问临界区”标志。 退出区:清除“正在访问临界区”标志。 3.临界区访问规则 空闲则入:没有进程在临界区时,任何进程可进入。 忙则等待:有进程在临界区时, ...
分类:
其他好文 时间:
2016-05-30 08:46:13
阅读次数:
180
atomic和nonatomic用来决定编译器生成的getter和setter是否为原子操作。 atomic 设置成员变量的@property属性时,默认为atomic,提供多线程安全。 在多线程环境下,原子操作是必要的,否则有可能引起错误的结果。加了atomic,setter函数会变成下面这样: ...
分类:
移动开发 时间:
2016-05-28 10:12:42
阅读次数:
346
先参考一个例子 http://www.cnblogs.com/aigongsi/archive/2012/04/01/2429166.html#!comments 即使只是i++,实际上也是由多个原子操作组成:read i; inc; write i,假如多个线程同时执行i++,volatile只能 ...
分类:
移动开发 时间:
2016-05-24 11:59:33
阅读次数:
432
面试问题: 下面的方法是否线程安全?怎样让它成为线程安全的方法? 本篇文章将解释一个常见的面试题,该问题被谷歌和很多其它公司问起过。它涉及的相对比较初级,而不是关于怎样去设计复杂的并发程序。 首先,这个问题的答案是No,因为counter++操作不是一个原子操作,而是由多个原子操作组成。 举个例子, ...
分类:
编程语言 时间:
2016-05-23 00:34:51
阅读次数:
147
如果你的代码所在的进程中有多个线程在同时运行,而这些线程可能会同时运行这段代码。如果每次运行结果和单线程运行的结果是一样的,而且其他的变量的值也和预期的是一样的,就是线程安全的。 或者说:一个类或者程序所提供的接口对于线程来说是原子操作或者多个线程之间的切换不会导致该接口的执行结果存在二义性,也就是 ...
分类:
编程语言 时间:
2016-05-22 13:59:52
阅读次数:
203
推荐高洪岩的《Java多线程编程核心技术》,虽然很多代码都是纯粹为了炫耀技术,但看完之后再也不怕被多线程问倒了 随笔提一句,前面看了那多章同步代码块的内容,后面却发现lock完全可以取代。这本书在我看来可以砍掉一半,直接用Lock就好了。 问题1:用Java写代码来解决生产者——消费者问题。 使用l ...
分类:
编程语言 时间:
2016-05-20 00:55:13
阅读次数:
175
一 调试前的准备
二 内核中的bug
三 内核调试配置选项
1 内核配置
2 调试原子操作
四 引发bug并打印信息
1 BUG()和BUG_ON()
2 dump_stack()
五 printk()
1 printk函数的健壮性
2 printk函数脆弱之处
3 LOG等级
4 记录缓冲区
5 syslogd/klogd
6 dmesg...
分类:
系统相关 时间:
2016-05-18 19:25:24
阅读次数:
365
Unsafe 简单讲一下这个类。Java无法直接访问底层操作系统,而是通过本地(native)方法来访问。不过尽管如此,JVM还是开了一个后门,JDK中有一个类Unsafe,它提供了硬件级别的原子操作。 这个类尽管里面的方法都是public的,但是开发者是无法使用它的,JDK API文档也没有提供关 ...
分类:
其他好文 时间:
2016-05-18 17:50:11
阅读次数:
179