线程安全:如果一个函数在同一时刻可以被多个线程安全地调用,就称该函数是线程安全地。
信号可重入:如果一个函数对异步信号处理程序的重入是安全地,那么就称函数是异步信号安全地。
同时满足以上两个条件的函数是 异步-信号安全的。
我认为这两者之间的区别是:
线程安全,强调的是同步。就是指多个线程是否能同时调用一个函数
信号安全,强调的是异步。就是当一个函数执行时,被信号中断,执行信号处理函数,这时处理函数能否对同一个函数进行再次调用。
举个例子,malloc函数,就是线程安全,但不是信号安全的。
由于malloc内部使用了线程同步的技术(比如,互斥量)使得多个线程可以同时调用。
但是当执行malloc函数时如果被信号处理程序打断,而且信号处理函数中再次调用malloc函数,那么就会是一个BUG。
阅读(533) | 评论(0) | 转发(0) |