异常安全代码:发生异常后进行清理工作
从概念上讲
线程安全只要求函数在被多个执行流并发调用时,不出异常
可重入是指函数被任意调用时,不出异常
显然可重入的约束更强,与线程安全相比主要差别在于,可重入除了要求多执行流下能正常外 在同一执行流下也能正常工作
同一执行流下如何被多次调用?可能出现在递归 或者执行流进入异常处理流程(eg longjump)中再次调用。
要求更苛刻的可重入必须保证 不操作共享数据 不返回共享数据 不包含非可重入的函数
而操作了共享数据的函数只需通过同步操作保证共享数据的安全就满足了线程安全的条件