可重入函数与线程安全

    可重入函数与线程安全          安全

线程安全:多线程

假如在一个函数中它是这么写的,在一个全局链表上存放数据,在单线程模式下,咱们先new一个新的节点而后让head->next指向这个节点,这种场景在多线程场景下会是这样的过程,线程一new了一个节点,而后cpu转去执行线程二,线程二new一个节点后head->next指向线程二,而后执行线程一,线程一的head->next也指向它刚刚new出来的节点,这就致使一个head指向了两个节点,这也就是线程安全的问题。
ide

致使线程安全问题须要知足下面两个条件:函数

1>:必定是发生在多个线程访问一个全局变量或者静态变量的场景下面。
2>:操做时非原子性的。
spa

如何避免线程安全:线程

对访问全局或静态变量的语句先后加锁,这样就不会致使多个线程访问同一个资源的问题发生。接口

可重入函数:资源

可重入函数的概念很简单,就是这个函数是能够在任什么时候候均可以被打断,而且不会形成线程安全,因为在可重入函数中使用的都是线程本身的栈空间,变量是惟一的,不会形成访问同一个资源的问题,若是要在其种访问全局或静态变量仍是要加上锁来避免冲突。it

系统中有很些函数是不能用在可重入函数中的:例如malloc,new,还有一些I/O接口函数等。class

相关文章
相关标签/搜索