Linux并发(函数的可重入性)

Linux并发(函数的可重入性)_第1张图片

可重入函数是并发编程中必须要考虑的问题,否则代码就会有隐患,更糟糕的是这些隐患往往只能在特定场景下才能复现。

 

拓展:

一个函数所谓的可重入性,是在多线程的语境下的概念:一个函数如果同时被多条线程调用,他返回的结果都是严格一致的,那么该函数被称为“可重入”函数(reentrance funciton),否则被称为“不可重入”函数。

 

在使用不可重入函数时要注意:多条线程同时调用这些函数有可能会产生不一致的结果,产生这样结果的原因有三:

一是因为函数内部使用了共享资源,比如全局变量、环境变量。

二是因为函数内部调用了其他不可重入函数。

三是因为函数执行结果与某硬件设备相关。

 

从这点出发,如果你想要写一个线程安全的可重入函数的话,只要遵循以下原则就行了:

A) 不使用任何静态数据,只使用局部变量或者堆内存。

B) 不调用上表中的任何非线程安全的不可重入函数。

 

如果不能同时满足以上两个条件,可以使用信号量、互斥锁等机制来确保使用静态数据或者调用不可重入函数时的互斥效果。这是编写多线程程序必须要注意的地方。

你可能感兴趣的:(每日一句)