mutex 的 可重入

在所有的线程同步方法中,恐怕互斥锁(mutex)的出场率远远高于其它方法。互斥锁的理解和基本使用方法都很容易,这里不做更多介绍了。

Mutex可以分为递归锁(recursive mutex)和非递归锁(non-recursive mutex)。可递归锁也可称为可重入锁(reentrant mutex),非递归锁又叫不可重入锁(non-reentrant mutex)。

二者唯一的区别是,同一个线程可以多次获取同一个递归锁,不会产生死锁。而如果一个线程多次获取同一个非递归锁,则会产生死锁。

时间: 2024-08-09 10:36:51

mutex 的 可重入的相关文章

可重入锁 & 自旋锁 & Java里的AtomicReference和CAS操作 & Linux mutex不可重入

之前还是写过蛮多的关于锁的文章的: http://www.cnblogs.com/charlesblc/p/5994162.html <[转载]Java中的锁机制 synchronized & 偏向锁 & 轻量级锁 & 重量级锁 & 各自> http://www.cnblogs.com/charlesblc/p/5935326.html <[Todo] 乐观悲观锁,自旋互斥锁等等> http://www.cnblogs.com/charlesblc/

可重入,异步信息安全,线程安全

这三个概念一直纠缠着我,我也时不时的会拿出来辨析下,直到昨天才发现自己可以把它们理顺了.所以学习就是这样一个反复的过程,最终达到顿悟的效果.本文主要参考APUE第三版英文版第10.6和12.5节,以及WIKI百科,还有CSDN和stackoverflow中对这些概念的讨论,然后给出一份自己认为比较合理的理解. ? I. 中断,信号,线程切换 这三个概念都牵涉到异步通信,即运行中的代码不可预测什么时候会发生中断,什么时候会收到信号,什么时候会发生线程切换: 中断,一般指的硬件中断,是硬件对cpu的

可重入与线程安全(大多数Qt类是可重入,非线程安全的)

可重入与线程安全 在Qt文档中,术语“可重入”与“线程安全”被用来说明一个函数如何用于多线程程序.假如一个类的任何函数在此类的多个不同的实例上,可以被多个线程同时调用,那么这个类被称为是“可重入”的.假如不同的线程作用在同一个实例上仍可以正常工作,那么称之为“线程安全”的. 大多数c++类天生就是可重入的,因为它们典型地仅仅引用成员数据.任何线程可以在类的一个实例上调用这样的成员函数,只要没有别的线程在同一个实例上调用这个成员函数.举例来讲,下面的Counter 类是可重入的: class Co

QThread 与 QObject的关系(QObject可以用于多线程,可以发送信号调用存在于其他线程的slot函数,但GUI类不可重入)

QThread 继承 QObject..它可以发送started和finished信号,也提供了一些slot函数. QObject.可以用于多线程,可以发送信号调用存在于其他线程的slot函数,也可以postevent给其他线程中的对象.之所以可以这样做,是因为每个线程都有自己的事件循环. 在进行下面的讲解之前,应该了解的重要的一点是:QThread 对象所在的线程,和QThread 创建的线程,也就是run()函数执行的线程不是同一个线程.QThread 对象所在的线程,就是创建对象的线程.我

可重入和线程安全简单介绍

可重入和线程安全 可重入和线程安全这两个术语,经常出现在计算机编程中,用于指明类和函数在多线程程序中的使用. 可重入:若一个程序或子程序可以“安全的被并行执行(Parallel computing)”,则称其为可重入(reentrant或re-entrant)的. 若一个函数是可重入的,则该函数: 1.不能含有静态(全局)非常量数据. 2.不能返回静态(全局)非常量数据的地址. 3.只能处理由调用者提供的数据. 4.不能依赖于单实例模式资源的锁. 5.不能调用(call)不可重入的函数. 线程安

linux可重入、异步信号安全和线程安全

一 可重入函数 当一个被捕获的信号被一个进程处理时,进程执行的普通的指令序列会被一个信号处理器暂时地中断.它首先执行该信号处理程序中的指令.如果从信号处理程序返回(例如没有调用exit或longjmp),则继续执行在捕获到信号时进程正在执行的正常指令序列(这和当一个硬件中断发生是所发生的事情相似.)但是在信号处理器里,我们并不知道当信号被捕获时进程正在执行哪里的代码. 如果进程正使用malloc在它的堆上分配额外的内存,而此时由于捕捉到信号而插入执行该信号处理程序,其中又调用了malloc,这会

Writing Reentrant and Thread-Safe Code(译:编写可重入和线程安全的代码)

Writing Reentrant and Thread-Safe Code 编写可重入和线程安全的代码 (http://www.ualberta.ca/dept/chemeng/AIX-43/share/man/info/C/a_doc_lib/aixprggd/genprogc/writing_reentrant_thread_safe_code.htm) In single-threaded processes there is only one flow of control. The

python多线程编程(3): 死锁和可重入锁

死锁 在线程间共享多个资源的时候,如果两个线程分别占有一部分资源并且同时等待对方的资源,就会造成死锁.尽管死锁很少发生,但一旦发生就会造成应用的停止响应.下面看一个死锁的例子: 按 Ctrl+C 复制代码 按 Ctrl+C 复制代码 执行结果: Thread-1 got resAThread-1 got resBThread-1 got resBThread-1 got resAThread-2 got resAThread-2 got resBThread-2 got resBThread-2

可重入(Reentrancy)VS线程安全(Thread safety)

在Wiki上,可重入的定义如下(详细链接) In computing, a computer program or subroutine is called reentrant if it can be interrupted in the middle of its execution and then safely called again ("re-entered") before its previous invocations complete execution. The