线程安全函数概念:线程安全的概念比较直观。一般说来,一个函数被称为线程安全的,当且仅当被多个并发线程反复调用时,它会一直产生正确的结果。确保线程安全:要确保函数线程安全,主要需要考虑的是线程之间的共享变量。属于同一进程的不同线程会共享进程内存空间中的全局区..
分类:
编程语言 时间:
2016-07-19 11:29:39
阅读次数:
189
摘要:本文主要讲了读写锁。一、读写锁ReadWriteLock 在上文中回顾了并发包中的可重入锁ReentrantLock,并且也分析了它的源码。从中我们知道它是一个单一锁(笔者自创概念),意思是在多人读、多人写、或同时有人读和写时。只能有一个人能拿到锁,执行代码。但是在很多场景。我们想控制它能多人同时读,但是又不让它多人写或同时读和写时。(想想这是不是和数据库的可重复读有点类型?),...
分类:
编程语言 时间:
2016-07-19 10:32:20
阅读次数:
183
线程安全 比如一个 ArrayList 类,在添加一个元素的时候,它可能会有两步来完成: 1. 在 Items[Size] 的位置存放此元素; 2. 增大 Size 的值。 在单线程运行的情况下,如果 Size = 0,添加一个元素后,此元素在位置 0,而且 Size=1;而如果是在多线程情况下,比 ...
分类:
编程语言 时间:
2016-07-19 09:29:15
阅读次数:
195
概念 重入:即重复调用,函数被不同的流调用,有可能会出现第一次调用还没返回时就再次进入该函数开始下一次调用。 可重入:当程序被多个线程反复执行,产生的结果正确。 如果一个函数只访问自己的局部变量或参数,称为可重入函数。 不可重入:当程序被多个线程反复调用,产生的结果出错。 当函数访问一个全局的变量或 ...
分类:
编程语言 时间:
2016-07-18 02:43:08
阅读次数:
167
1、可重入函数可重入函数即表示可以被多个执行流重复进入,意味着只使用自己栈上的变量,可以允许有该函数的多个副本在运行,由于它们使用的是分离的栈,所以不会互相干扰。一个不可重入函数的例子:intglobal;intfun(inta){inttemp;global=a;temp=gloabl*2;returntemp;}global..
分类:
编程语言 时间:
2016-07-13 23:37:22
阅读次数:
177
在讲可重复函数与线程安全之前先来了解什么是可重复函数和线程安全。可重复函数:在多线程或有异常控制流的情况下,当某个函数运行到中途时,控制流(也就是当前指令序列)就有可能被打断而去执行另一个函数.而"另一个函数"很有可能是它本身.,如果在这种情况下不会出现问题,比如说..
分类:
编程语言 时间:
2016-07-13 23:34:00
阅读次数:
1118
1、可重入函数1)举例说明:main函数调用insert函数向一个链表head中插入节点node1,插入操作分为两步,刚做完第一步的时候,因为硬件中断使进程切换到内核,再次回用户态之前检查到有信号待处理,于是切换到sighandler函数sighandler也调用insert函数向同一个链表head中插入节点nod..
分类:
编程语言 时间:
2016-07-13 14:01:25
阅读次数:
182
线程安全这个词对我来说已经不是很陌生的了,但是遇到一个叫做可重入函数的词,它给我的感觉和线程安全是这么的相近,但既然拿出来了,肯定是有区别的,下面就说说他们之间的区别和联系。 要先解释这两个词语才行。 线程安全:似乎是在牛客网刷题的时候看到一个正确的选项说的是,线程安全问题都是由全局变量及静态变量引 ...
分类:
编程语言 时间:
2016-07-13 11:43:54
阅读次数:
199
我们在10.6节中讨论了可重入函数以及信号处理函数,线程与信号处理函数在重入方面是非常相似的。多线程的控制的本质也是同时调用相同的函数。 如果一个函数可以被多个线程同时安全地调用,我们称该函数为线程安全的(thread-safe).除了图12.9列出的函数之外,The Single Unix Spe... ...
分类:
其他好文 时间:
2016-07-02 20:13:09
阅读次数:
270
ReentrantLock介绍
ReentrantLock是一个可重入的互斥锁,又被称为“独占锁”。
顾名思义,ReentrantLock锁在同一个时间点只能被一个线程锁持有;而可重入的意思是,ReentrantLock锁,可以被单个线程多次获取。
ReentrantLock分为“公平锁”和“非公平锁”。它们的区别体现在获取锁的机制上是否公平。“锁”是为了保护竞争资源,防止多个线程同时操作线...
分类:
编程语言 时间:
2016-07-01 11:56:56
阅读次数:
284