我希望我的C程序即使在非常老的Unix操作系统上也可以移植,但问题是我正在使用pthreads和动态分配(malloc).我所知道的所有Unix都有一个线程安全的malloc(
Linux,* BSD,Irix,Solaris),但是C标准并不能保证这一点,而且我确定有很老的版本,这是不正确的.
那么,是否有一些平台列表需要使用互斥锁来包装malloc()调用?我打算编写一个./configure测试,检查当前平台是否在该列表中.
另一种选择是测试malloc()的线程安全性,但我知道没有确定性的方法来做到这一点.关于这个的任何想法呢?
具有线程的唯一C标准(因此可以与您的问题相关)是C11,其中指出:
For purposes of determining the existence of a data race,memory
allocation functions behave as though they accessed only memory
locations accessible through their arguments and not other static
duration storage.
或者换句话说,只要两个线程不传递相同的地址来重新分配或释放所有对内存函数的调用都是线程安全的.
对于POSIX,这就是你现在可以找到的所有Unix,你有:
Each function defined in the System Interfaces volume of IEEE Std 1003.1-2001 is thread-safe unless explicitly stated otherwise.
我不知道你从哪里断言malloc对旧的Unix来说不是线程安全的,一个没有实现该线程安全的线程的系统几乎没用.在这样一个旧系统上可能存在的问题是性能,但它应该始终有效.