<?xml version="1.0" encoding="UTF-8" standalone="no"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <title>Db::set_lk_exclusive()</title> <link rel="stylesheet" href="apiReference.css" type="text/css" /> <meta name="generator" content="DocBook XSL Stylesheets V1.73.2" /> <link rel="start" href="index.html" title="Berkeley DB C++ API Reference" /> <link rel="up" href="db.html" title="Chapter 2. The Db Handle" /> <link rel="prev" href="dbset_heap_regionsize.html" title="Db::set_heap_regionsize()" /> <link rel="next" href="dbset_lorder.html" title="Db::set_lorder()" /> </head> <body> <div xmlns="" class="navheader"> <div class="libver"> <p>Library Version 11.2.5.3</p> </div> <table width="100%" summary="Navigation header"> <tr> <th colspan="3" align="center">Db::set_lk_exclusive()</th> </tr> <tr> <td width="20%" align="left"><a accesskey="p" href="dbset_heap_regionsize.html">Prev</a> </td> <th width="60%" align="center">Chapter 2. The Db Handle </th> <td width="20%" align="right"> <a accesskey="n" href="dbset_lorder.html">Next</a></td> </tr> </table> <hr /> </div> <div class="sect1" lang="en" xml:lang="en"> <div class="titlepage"> <div> <div> <h2 class="title" style="clear: both"><a id="dbset_lk_exclusive"></a>Db::set_lk_exclusive()</h2> </div> </div> </div> <pre class="programlisting">#include <db_cxx.h> int Db::set_lk_exclusive(int nowait_onoff); </pre> <p> Configures the database handle to obtain a write lock on the entire database when it is opened. This gives the handle exclusive access to the database, because the write lock will block all other threads of control for both read and write access. </p> <p> Use this method to improve the throughput performance on your database for the thread that is controlling this handle. When configured with this method, operations on the database do not acquire page locks as they perform read and/or write operations. Also, the exclusive lock means that operations performed on the database handle will never be blocked waiting for lock due to another thread's activities. The application will also be immune to deadlocks. </p> <p> On the other hand, use of this method means that you can only have a single thread accessing the database until the handle is closed. For some applications, the loss of multiple threads concurrently operating on the database will result in performance degradation. </p> <p> Also, use of this method means that you can only have one transaction active for the handle at a time. </p> <div class="note" style="margin-left: 0.5in; margin-right: 0.5in;"> <h3 class="title">Note</h3> <p> This method is incompatible with the <a class="link" href="dbopen.html#open_DB_THREAD">DB_THREAD</a> configuration flag. </p> </div> <p> The <code class="methodname">Db::set_lk_exclusive()</code> method may not be called after the <a class="xref" href="dbopen.html" title="Db::open()">Db::open()</a> method is called. </p> <p> The <code class="methodname">Db::set_lk_exclusive()</code> <span> <span> method either returns a non-zero error value or throws an exception that encapsulates a non-zero error value on failure, and returns 0 on success. </span> </span> </p> <div class="sect2" lang="en" xml:lang="en"> <div class="titlepage"> <div> <div> <h3 class="title"><a id="lk_exclusive_rep_notes"></a>Replication Notes</h3> </div> </div> </div> <p> Replication applications that use exclusive database handles need to be written with caution. This is because replication clients cannot process updates on an exclusive database until all local handles on the database are closed. Also, attempting to open an exclusive database handle on a currently operating client will result in the open call failing with the error <code class="literal">EINVAL</code>. </p> <p> Also, opening an exclusive database handle on a replication master will result in all clients being locked out of the database. On clients, existing handles on the exclusive database will return the error <code class="literal">DB_REP_DEAD_HANDLE</code> when accessed, and must be closed. New handles opened on the exclusive database will block until the master closes its exclusive database handle. </p> </div> <div class="sect2" lang="en" xml:lang="en"> <div class="titlepage"> <div> <div> <h3 class="title"><a id="idp322864"></a>Parameters</h3> </div> </div> </div> <div class="sect3" lang="en" xml:lang="en"> <div class="titlepage"> <div> <div> <h4 class="title"><a id="idp323032"></a>nowait_onoff</h4> </div> </div> </div> <p> If set to <code class="literal">0</code>, this method will block until it can obtain the exclusive lock on the database. If set to some value other than <code class="literal">0</code>, <code class="literal">DB_LOCK_NOTGRANTED</code> is returned when the handle is opened if the exclusive database lock cannot be immediately obtained. </p> </div> </div> <div class="sect2" lang="en" xml:lang="en"> <div class="titlepage"> <div> <div> <h3 class="title"><a id="idp320104"></a>Errors</h3> </div> </div> </div> <p> The <code class="methodname">Db::set_lk_exclusive()</code> <span> <span> method may fail and throw a <a class="link" href="dbexception.html" title="Chapter 6. The DbException Class">DbException</a> exception, encapsulating one of the following non-zero errors, or return one of the following non-zero errors: </span> </span> </p> <div class="sect3" lang="en" xml:lang="en"> <div class="titlepage"> <div> <div> <h4 class="title"><a id="idp339672"></a>EINVAL</h4> </div> </div> </div> <p> If the method was called after <a class="xref" href="dbopen.html" title="Db::open()">Db::open()</a> was called; the method was called on a currently operating replication client; or if an invalid flag value or parameter was specified. </p> </div> </div> <div class="sect2" lang="en" xml:lang="en"> <div class="titlepage"> <div> <div> <h3 class="title"><a id="idp340968"></a>Class</h3> </div> </div> </div> <p> <a class="link" href="db.html" title="Chapter 2. The Db Handle">Db</a> </p> </div> <div class="sect2" lang="en" xml:lang="en"> <div class="titlepage"> <div> <div> <h3 class="title"><a id="idp306720"></a>See Also</h3> </div> </div> </div> <p> <a class="xref" href="db.html#dblist" title="Database and Related Methods">Database and Related Methods</a> </p> </div> </div> <div class="navfooter"> <hr /> <table width="100%" summary="Navigation footer"> <tr> <td width="40%" align="left"><a accesskey="p" href="dbset_heap_regionsize.html">Prev</a> </td> <td width="20%" align="center"> <a accesskey="u" href="db.html">Up</a> </td> <td width="40%" align="right"> <a accesskey="n" href="dbset_lorder.html">Next</a></td> </tr> <tr> <td width="40%" align="left" valign="top">Db::set_heap_regionsize() </td> <td width="20%" align="center"> <a accesskey="h" href="index.html">Home</a> </td> <td width="40%" align="right" valign="top"> Db::set_lorder()</td> </tr> </table> </div> </body> </html>