竞争状态是这样一种情形:操作共享资源的两个进程(或线程),其结果取决于一个无法预期的顺序,即这些进程获得CPU使用权的先后相对顺序。 以独占的方式创建一个文件 当同时指定了O_EXCL和O_CREAT作为open的标志位时,如果要打开的文件已经存在,则open将返回一个错误。 这种机制为了保证进程是... ...
分类:
其他好文 时间:
2018-03-25 13:15:12
阅读次数:
169
线程 1.优先级 每个线程有一个优先级,更高优先级的线程优先运行,优先的意思是只是在分配cpu时间段的时候,得到的概率高一些。 当在某个线程创建一个新的线程,这个线程有与创建线程相同的优先级。 setPriority(int newPriority) 2.守护线程 每个线程可能被标记为1个守护线程, ...
分类:
编程语言 时间:
2018-03-18 14:59:03
阅读次数:
228
今天才发现C++11原来支持原子操作,还支持thread类创建线程,真的是越来越6了。之前做项目的时候创建线程都是用POSIX标准的pthread_create函数,然后线程同步一般用的都是pthread_mutex。今天又get了一个新技能,可以用thread类来创建线程,用atomic_flag ...
分类:
编程语言 时间:
2018-03-17 16:51:49
阅读次数:
231
在线程安全1中,我介绍了线程同步的意义和一种实现线程同步的方法:volatile。volatile关键字属于原子操作的一种,若对一个关键字使用volatile,很多时候会显得很“浪费”,因为只有在并发访问的情况下才需要“易变”读写,单线程访问时并不需要。在命名空间System.Threading命名 ...
分类:
编程语言 时间:
2018-03-12 22:57:08
阅读次数:
508
当你需要2个线程读写同一个数据时,就需要数据同步。线程同步的办法有:(1)原子操作;(2)锁。原子操作能够保证该操作在CPU内核中不会被“拆分”,锁能够保证只有一个线程访问该数据,其他线程在尝试获得有锁的数据时,会被拒绝,直到当前获得数据的线程将锁释放,其他线程才能够获得数据。 为什么要线程同步? ...
分类:
编程语言 时间:
2018-03-12 01:08:59
阅读次数:
207
原子性 原子性是指一个操作是不可中断的。即使是在多个线程一起执行的时候,操作一旦开始,也不会被其他线程干扰。即原子操作是一个做小操作。 例如 i++,其实经历了读,算,赋值绝对算不上是一个原子操作。一个i = 10这样的赋值操作可以称为原子操作。 java.util.comcurrent.atomi ...
分类:
移动开发 时间:
2018-03-10 21:51:44
阅读次数:
213
原子操作可以理解为: 一个数,很多线程去同时修改它,不加sync同步锁,就可以保证修改结果是正确的 Atomic正是采用了CAS算法,所以可以在多线程环境下安全地操作对象。 volatile是Java的关键字,官方解释:volatile可以保证可见性、顺序性、一致性。 可见性:volatile修饰的 ...
分类:
其他好文 时间:
2018-03-03 10:59:35
阅读次数:
210
文章转载自 "聊聊并发(五)——原子操作的实现原理" 原子(atom)本意是“不能被进一步分割的最小粒子”,而原子操作(atomic operation)意为”不可被中断的一个或一系列操作” 。在多处理器上实现原子操作就变得有点复杂。本文让我们一起来聊一聊在Inter处理器和Java里是如何实现原子 ...
分类:
其他好文 时间:
2018-03-03 00:40:27
阅读次数:
238
引言 Java从JDK1.5开始提供了java.util.concurrent.atomic包,方便程序员在多线程环境下,无锁的进行原子操作。原子变量的底层使用了处理器提供的原子指令,但是不同的CPU架构可能提供的原子指令不一样,也有可能需要某种形式的内部锁,所以该方法不能绝 ...
分类:
其他好文 时间:
2018-03-02 23:55:23
阅读次数:
439
1、单线程,单个命令都是原子性操作 2、5种数据类型,string(字符串),hash(哈希),list(列表),set(集合不可重复)及zset(sorted set:有序集合) 3、multi事务与pipeline管道,都是批量执行命令,区别pipeline不是原子操作, 4、事务没有回滚,WA ...
分类:
其他好文 时间:
2018-02-25 19:26:19
阅读次数:
220