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
1:对所调用函数的错误返回码要仔细、全面地处理。
2:明确函数功能,精确(而不是近似)地实现函数设计。
3:编写可重入函数时,应注意局部变量的使用(如编写C/C++语言的可重入函数时,应使用auto即缺省态局部变量或寄存器变量)。
说明:编写C/C++语言的可重入函数时,不应使用static局部变量,否则必须经过特殊处理,才能使函数具有可重入性。
4:编写可重入函数时,若使用全局变量,...
分类:
其他好文 时间:
2016-06-04 16:29:28
阅读次数:
689
当一个信号捕获到并开始被进程处理的时候,进程正常执行的指令序列将被信号处理函数临时中断,进程立即转到信号处理函数中开始执行,如果信号处理函数返回(而不是调用exit或者是longjmp等),然后在进入信号处理函数之前进程正在执行的指令序列将会接着执行,但是在信号处理函数中,我们无法获知在信号被捕获的... ...
分类:
其他好文 时间:
2016-05-23 00:51:26
阅读次数:
284
当一个信号捕获到并开始被进程处理的时候,进程正常执行的指令序列将被信号处理函数临时中断,进程立即转到信号处理函数中开始执行,如果信号处理函数返回(而不是调用exit或者是longjmp等),然后在进入信号处理函数之前进程正在执行的指令序列将会接着执行,但是在信号处理函数中,我们无法获知在信号被捕获的 ...
分类:
其他好文 时间:
2016-05-15 19:38:03
阅读次数:
199
一、可重入函数可重入函数主要用于多任务环境中,一个可重入的函数简单来说就是可以被中断的函数,也就是说,可以在这个函数执行的任何时刻中断它,转入OS调度下去执行另外一段代码,而返回控制时不会出现什么错误;,局部变量可重入函数;不可重入的函数由于使用了一些系统资源..
分类:
编程语言 时间:
2016-05-10 15:30:49
阅读次数:
218
可重入函数与线程安全线程安全:假如在一个函数中它是这么写的,在一个全局链表上存放数据,在单线程模式下,我们先new一个新的节点然后让head->next指向这个节点,这种场景在多线程场景下会是这样的过程,线程一new了一个节点,然后cpu转去执行线程二,线程二new一个节点后..
分类:
编程语言 时间:
2016-05-09 22:17:56
阅读次数:
284
在之前的博文中有说过线程,线程是一个执行流,一个指令序列,一个指令分支,为了共享资源而产生的线程,但只要是资源,都会出现资源的数目与操作安全问题,所以在线程这一块,设计了信号量,条件变量,各种锁,来保证资源的访问独占性与原子性。什么是线程安全?线程安全指的..
分类:
编程语言 时间:
2016-05-09 07:23:17
阅读次数:
223
在Linux:信号上博文中我们写了一个mysleep,但是实际上这个函数在多线程环境下是会出现错误的,也就是我们这个mysleep函数并不是可重入函数,现在重新审视“mysleep”程序,设想这样的时序:1.注册SIGALRM信号的处理函数。2.调用alarm(nsecs)设定闹钟。3.内核调度优先级更高的进..
分类:
系统相关 时间:
2016-05-09 07:21:41
阅读次数:
315