最近在写linux服务器端程序,使用了多线程和Socket,但是发现了不可重入函数的问题。
发生不可重入问题的函数为:localtime,inet_ntoa,getpwnam和函数getgrnam,在freebsd操作系统中只要将这些不可重入的函数改为对应的可重入函数:localtime_r,inet_ntoa_r,getpwnam_r和函数getgrnam_r即可。
而rand,srand以及iconv等函数也是线程非安全函数,需要对响应代码添加锁。
不可重入函数将会导致多线程中数据的互相冲突,使线程不安全。