2

net-snmp ライブラリ (http://net-snmp.sourceforge.net/tutorial/tutorial-5/toolkit/demon/index.html) を使用して snmp サブエージェントを実装する方法を確認しました。

例はうまく機能しますが、「netsnmp_register_int_instance(&variable)」で参照で渡される変数について質問しています

この変数は、「agentx」にサブエージェントに変数の値を与えるように依頼する snmp デーモンによって snmp 要求が受信されたときに読み取られます。

しかし、ロックはどうですか?サブエージェントを自分のバイナリにリンクして、サブエージェントがその状態に関する情報を毎秒提供できるようにします。

変数が自分のコードによって書き込まれている間に、snmp ライブラリ コードによって読み取られている可能性がありますか?

ロックを設定するには、変数を読み取る snmp ライブラリ ブロックのコードを変更する必要がありますか?

ありがとうございました。

4

1 に答える 1

1

バイナリがマルチスレッドの場合、ロックが必要です。そうでない場合は、心配しないでください。

最も簡単な方法は、エージェント x 処理ルーチン (agent_check_and_process など) を呼び出す前にロックを設定することです。より細かいロックが必要な場合は、net_snmp_register_int_instance を使用する代わりに、独自のハンドラーを実装する必要があります。

于 2011-07-18T20:31:34.307 に答える