### 2.16 `__env_lock`, `__env_unlock`—lock environ variable

Synopsis

    #include <envlock.h>
    void __env_lock (struct _reent *reent);
    void __env_unlock (struct _reent *reent);

Description
The `setenv` family of routines call these functions when they need to modify the environ variable. The version of these routines supplied in the library use the lock API defined in sys/lock.h. If multiple threads of execution can call `setenv`, or if `setenv` can be called reentrantly, then you need to define your own versions of these functions in order to safely lock the memory pool during a call. If you do not, the memory pool may become corrupted.

A call to `setenv` may call `__env_lock` recursively; that is, the sequence of calls may go `__env_lock`, `__env_lock`, `__env_unlock`, `__env_unlock`. Any implementation of these routines must be careful to avoid causing a thread to wait for a lock that it already holds.