猿问

线程安全与可重入

最近,我问了一个问题,标题为“ malloc线程安全吗?” ,然后我问:“ malloc是否可重入?”


我的印象是所有重入者都是线程安全的。


这个假设错了吗?


撒科打诨
浏览 723回答 3
3回答

杨__羊羊

这取决于定义。例如,Qt使用以下内容:即使调用使用共享数据,也可以从多个线程同时调用线程安全*函数,因为对共享数据的所有引用都已序列化。一个可重入函数也可以从多个线程同时调用,但只有当每个调用使用自己的数据。因此,线程安全函数始终是可重入的,但是重入函数并不总是线程安全的。通过扩展,如果可以从多个线程安全地调用其成员函数,则该类称为可重入的,只要每个线程使用该类的不同实例即可。如果可以从多个线程安全地调用其成员函数,则该类是线程安全的,即使所有线程都使用该类的相同实例也是如此。但他们也警告:注意:多线程域中的术语尚未完全标准化。POSIX使用可重入和线程安全的定义,这些定义对其C API有所不同。当将其他面向对象的C ++类库与Qt一起使用时,请确保理解定义。
随时随地看视频慕课网APP
我要回答