# DBENV->set_func_yield |

`

###

    #include <db.h>

    int
    DBENV->set_func_yield(DB_ENV *dbenv, int (*func_yield)(void));

# Description

The Berkeley DB library requires the ability to yield the processor from the current thread of control to any other waiting threads of control. The func_yield argument must conform to the following interface:

>     int yield(void);

The func_yield function must be able to cause the rescheduling all participants in the current Berkeley DB environment, whether threaded or not. It may be incorrect to supply a thread yield function if more than a single process is operating in the Berkeley DB environment. This is because many thread-yield functions will not allow other processes to run, and the contested lock may be held by another process, not by another thread.

If no func_yield function is specified, or if the yield function returns an error, the function specified by the DBENV->set_func_sleep entry will be used instead or subsequently, i.e., if no yield function is specified, or it is possible for the yield function to fail, the sleep function must cause the processor to reschedule any waiting threads of control for execution.

Solaris note:
  On Solaris systems where the IEEE/ANSI Std 1003.1 (POSIX) pthread interfaces are not available, the Berkeley DB library uses the undocumented _lock_try and _lock_clear function calls instead of either the sema_trywait(3T) or sema_wait(3T) function calls. This is because of problems in those interfaces in some releases of the Solaris C library.

The func_yield function must return the value of errno on failure and 0 on success.

The DBENV->set_func_yield interface affects the entire application, not only the environment in which it is called.

The DBENV->set_func_yield interface may only be used to configure Berkeley DB before the DBENV->open interface is called.

The DBENV->set_func_yield function returns a non-zero error value on failure and 0 on success.

# Errors

EINVAL
  An invalid flag value or parameter was specified.

  Called after DBENV->open was called.

# See Also

DBENV->set_func_close, DBENV->set_func_dirfree, DBENV->set_func_dirlist, DBENV->set_func_exists, DBENV->set_func_free, DBENV->set_func_fsync, DBENV->set_func_ioinfo, DBENV->set_func_malloc, DBENV->set_func_map, DBENV->set_func_open, DBENV->set_func_read, DBENV->set_func_realloc, DBENV->set_func_seek, DBENV->set_func_sleep, DBENV->set_func_unlink, DBENV->set_func_unmap, DBENV->set_func_write and DBENV->set_func_yield.`

Copyright Sleepycat Software