首页 > 其他分享 >线程安全和可重入

线程安全和可重入

时间:2022-11-12 20:34:46浏览次数:37  
标签:重入 malloc 函数 信号处理 安全 线程

1. 结论(牢记): 

        可重入一定线程安全!!

                 

 2. 详解

/****************************************************/
1. 可重入
    可以被中断的函数,更多关心的是同一个线程内(这话也不是很对)。
    在信号的捕捉函数中一定要用可重入函数!!
    
2. 不可重入举例
    主函数中正在malloc,此时信号到来,在signal中也malloc,由于malloc是共享的同一个全局资源,
当信号处理返回到原来的执行流中却由于信号处理的改写而受影响,比如重入的问题导致malloc会分配相
同的内存区域,或者其他的数据篡改,锁死等,这样该函数就是不可重入的。 3.不可重入的函数: (1)函数内部使用了全局变量或静态局部变量; (2)函数的返回值是一个全局变量或静态变量; (3)函数内部调用了malloc/free函数; (4)函数内部使用了标准IO函数; (5)调用了其他不可重入函数 4. malloc、printf、free是线程安全但是不可重入,所以在信号处理函数中避免使用
(虽然一些信号捕捉函数中使用了printf,但实际商业代码中避免使用) cout是线程不安全的,导致日志信息无法按照固定顺序输出 /****************************************************/

 

标签:重入,malloc,函数,信号处理,安全,线程
From: https://www.cnblogs.com/dkhlaojogo/p/16884543.html

相关文章

  • 基于PRG构造的加密方案的安全性证明
    基于PRG构造的加密方案的安全性证明若\(\tilde{b}=0\),则与敌手交互的是一个完善保密方案,即密钥长度为\(l(n)\)的一次一密的加密方案,敌手猜中\(\tilde{b}=b\)的概率是\(\d......
  • 实现线程安全的方法三
    Lock锁实例化ReentrantlockprivateReentrantlocklock=new Reentrantlock(); publicvoidrun(){whilie(true){try{lock.lock()......
  • Linux系统中线程同步方式中的条件变量操作方法
      大家好,今天主要和大家聊一聊,如何使用Linux中线程同步方式中的条件变量。    第一:条件变量基本简介   条件变量是线程可用的另一种同步机制,条件变量用于自动阻......
  • 系统安全及应用
    推荐步骤:用户账户安全创建用户设置密码,禁用用户解锁用户,使用su命令切换普通用户和管理员,禁用账户密码文件防止创建删除修改用户信息配置sudo授权Alice用户执行管理员root命......
  • WPF 后台线程操作界面元素不卡UI界面线程 Dispatcher
    经常要考虑的,后台的耗时操作不要卡死主界面的问题。<StackPanelVerticalAlignment="Center"><Labelx:Name="lblHello">欢迎你光临WPF的世界!</Label><Button......
  • 解决线程安全问题二
    packagedeep;//同步方法classWindow3implementsRunnable{privateintticket=100;publicvoidrun(){while(true){show();......
  • 如何解决多线程安全问题一
    packagedeep;//问题:出现重票和错票(即线程安全问题)//原因:某个线程操作车票的过程中,未完成时其它线程就参与进来,也操作//如何解决:a操作完才允许其它线程加入//在java中通过......
  • 线程、 进程、 协程
    1.多线程(单线程、多线程)#线程、进程#线程是执行单位进程->公司线程->员工#进程是资源单位(每一个进程里面至少有一个线程)#单线程deffunc():for......
  • 线程创建
    线程创建继承Thread类方法1.自定义线程继承Thread类2.重写run()方法,编写线程执行体3.创建线程对象,调用start()方法启动线程注意:线程不一定立即执行,CPU安排调度pack......
  • 线程协作(生产者消费者模式)
    线程协作(生产者消费者模式)线程通信1.Java提供了几个方法解决线程之间的通信问题​。wait()表示线程一直等待,直到其他线程通知,与sleep不同,会释放锁​......