原文地址 : http://www.net-snmp.org/wiki/index.php/FAQ:General_19
Net-SNMP是线程安全的吗?
确切的说,不是。不过呢,在多线程管理的应用进程中是能够使用这个链接库的。这一点在REDMAE文件中已经有过详细的叙述。线程(以标准方式封装和发布的),可以概括为下列几点:
1、在激活任何线程之前调用“snmp_sess_init()”函数。
这个函数进行MIB的读和解析(这个过程不是线程安全的),也为后来的使用而准备一个会话结构体。
2、使用snmp_sess_open()函数打开一个SNMP会话,此函数返回一个不透明的会话地址,这个地址本质上独立于任何其它的会话(不考虑线程的话)。
3、链接库里面没有使用资源锁,这部分应该是应用进程的事儿。
Net-SNMP代理不是为多线程而设计的。如果把代理库嵌入到一个进程的副代理线程中,并且所有和SNMP相关的活动(包括创建陷阱和解析MIB)都由这一个线程单独来完成,那么会是安全的。
命令行工具被封装成了Net-SNMP的一部分来发布,其实它是一个简单的单线程应用程序,并且不是为多线程设计的。适应线程的模型留给学生做练习。
不幸的是,SNMPv3的支持和线程的支持是同时添加的,并且这两件事是平行的发生的,之后再也没有进行过验证多线程下SNMPv3支持的正确性。这样看起来在SNMPv3情况下并不是线程安全的。
翻译:郝峰波
mail : fengbohello@qq.com