Mib mib;
...

mib->lock_mib();

// code to lookup a MibEntry:
MibTable table = ...;

// enter protected region:
table->start_synch();

// now you can drop the Mib lock
mib->unlock_mib();

// do the real work on table
...

table->end_synch();

By default AGENT++ is a multi-threaded agent. Therefore access to each MibEntry in the a Mib has to be synchronized.

In order to reduce blocking of concurrent requests, AGENT++ uses a two level lockin:

  1. Mib instance level - locks the whole MIB
  2. MibEntry level - locks a scalar, sub-tree, or table

As tables and complex (sub-tree) entries may contain also MibEntry objects, for example scalars, additional levels can be implemented by the user.

In any case, the locking procedure must start with the following steps: