blob: 62a4c7159ca62b2d23af0bc28355847bf11cd7e9 [file] [log] [blame]
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://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/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<meta name="generator" content="Doxygen 1.9.1"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>API Reference Manual: ODP LOCKS</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="resize.js"></script>
<script type="text/javascript" src="navtreedata.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/searchdata.js"></script>
<script type="text/javascript" src="search/search.js"></script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
<link href="odpdoxygen.css" rel="stylesheet" type="text/css"/>
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
<tbody>
<tr style="height: 56px;">
<td id="projectlogo"><img alt="Logo" src="ODP-Logo-HQ.svg"/></td>
<td id="projectalign" style="padding-left: 0.5em;">
<div id="projectname">API Reference Manual
&#160;<span id="projectnumber">1.47.0</span>
</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.9.1 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
var searchBox = new SearchBox("searchBox", "search",false,'Search','.html');
/* @license-end */
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
$(function() {
initMenu('',true,false,'search.php','Search');
$(document).ready(function() { init_search(); });
});
/* @license-end */</script>
<div id="main-nav"></div>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
<div id="nav-tree">
<div id="nav-tree-contents">
<div id="nav-sync" class="sync"></div>
</div>
</div>
<div id="splitbar" style="-moz-user-select:none;"
class="ui-resizable-handle">
</div>
</div>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
$(document).ready(function(){initNavTree('group__odp__locks.html',''); initResizable(); });
/* @license-end */
</script>
<div id="doc-content">
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
onkeydown="return searchBox.OnSearchSelectKey(event)">
</div>
<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<iframe src="javascript:void(0)" frameborder="0"
name="MSearchResults" id="MSearchResults">
</iframe>
</div>
<div class="header">
<div class="summary">
<a href="#typedef-members">Typedefs</a> &#124;
<a href="#func-members">Functions</a> </div>
<div class="headertitle">
<div class="title">ODP LOCKS</div> </div>
</div><!--header-->
<div class="contents">
<a name="details" id="details"></a><h2 class="groupheader">API Description</h2>
<p>Various types of locks for thread synchronization. </p>
<p><b> Reader / writer lock (odp_rwlock_t) </b></p>
<p>A reader/writer lock allows multiple simultaneous readers but only one writer at a time. A thread that wants write access will have to wait until there are no threads that want read access. This causes a risk for starvation. The trylock variants can be used to avoid blocking when the lock is not immediately available.</p>
<p><b> Recursive reader/writer lock (odp_rwlock_recursive_t) </b></p>
<p>This is recursive version of the reader/writer lock. A thread can read- or write-acquire a recursive read-write lock multiple times without a deadlock. To release the lock, the thread must unlock it the same number of times. Recursion is supported only for a pure series of read or write lock calls. Read and write lock calls must not be mixed when recursing.</p>
<p>For example, these are supported...</p><ul>
<li>read_lock(); read_lock(); read_unlock(); read_unlock();</li>
<li>write_lock(); write_lock(); write_unlock(); write_unlock();</li>
</ul>
<p>... but this is not supported.</p><ul>
<li>read_lock(); write_lock(); write_unlock(); read_unlock();</li>
</ul>
<p>The trylock variants can be used to avoid blocking when the lock is not immediately available.</p>
<p><b> Spin lock (odp_spinlock_t) </b></p>
<p>Spinlock simply re-tries to acquire the lock as long as takes to succeed. Spinlock is not fair since some threads may succeed more often than others.</p>
<p><b> Recursive spin lock (odp_spinlock_recursive_t) </b></p>
<p>This is recursive version of the spin lock. A thread can acquire the lock multiple times without a deadlock. To release the lock, the thread must unlock it the same number of times.</p>
<p><b> Ticket lock (odp_ticketlock_t) </b></p>
<p>Acquiring a ticket lock happens in two phases. First the threads takes a ticket. Second it waits (spins) until it is its turn. Ticket locks are believed to be more fair than spin locks. Ticket locks shall not be used if a thread may be preempted, since other threads cannot acquire the lock while the thread in turn is stalled. </p>
<table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="typedef-members"></a>
Typedefs</h2></td></tr>
<tr class="memitem:ga19a1eb1cac68aac075aaa12833dd0330"><td class="memItemLeft" align="right" valign="top">typedef struct <a class="el" href="structodp__rwlock__s.html">odp_rwlock_s</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__odp__locks.html#ga19a1eb1cac68aac075aaa12833dd0330">odp_rwlock_t</a></td></tr>
<tr class="memdesc:ga19a1eb1cac68aac075aaa12833dd0330"><td class="mdescLeft">&#160;</td><td class="mdescRight">ODP reader/writer lock. <a href="group__odp__locks.html#ga19a1eb1cac68aac075aaa12833dd0330">More...</a><br /></td></tr>
<tr class="separator:ga19a1eb1cac68aac075aaa12833dd0330"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga20c1f9475bccb24bebf97389a05883d6"><td class="memItemLeft" align="right" valign="top">typedef struct <a class="el" href="structodp__rwlock__recursive__s.html">odp_rwlock_recursive_s</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__odp__locks.html#ga20c1f9475bccb24bebf97389a05883d6">odp_rwlock_recursive_t</a></td></tr>
<tr class="memdesc:ga20c1f9475bccb24bebf97389a05883d6"><td class="mdescLeft">&#160;</td><td class="mdescRight">Recursive rwlock. <a href="group__odp__locks.html#ga20c1f9475bccb24bebf97389a05883d6">More...</a><br /></td></tr>
<tr class="separator:ga20c1f9475bccb24bebf97389a05883d6"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga14ed6642fda2939383057798a757e25e"><td class="memItemLeft" align="right" valign="top">typedef struct <a class="el" href="structodp__spinlock__s.html">odp_spinlock_s</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__odp__locks.html#ga14ed6642fda2939383057798a757e25e">odp_spinlock_t</a></td></tr>
<tr class="memdesc:ga14ed6642fda2939383057798a757e25e"><td class="mdescLeft">&#160;</td><td class="mdescRight">ODP spinlock. <a href="group__odp__locks.html#ga14ed6642fda2939383057798a757e25e">More...</a><br /></td></tr>
<tr class="separator:ga14ed6642fda2939383057798a757e25e"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga46b28a220e7987dea0b5f6aec06732ea"><td class="memItemLeft" align="right" valign="top">typedef struct <a class="el" href="structodp__spinlock__recursive__s.html">odp_spinlock_recursive_s</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__odp__locks.html#ga46b28a220e7987dea0b5f6aec06732ea">odp_spinlock_recursive_t</a></td></tr>
<tr class="memdesc:ga46b28a220e7987dea0b5f6aec06732ea"><td class="mdescLeft">&#160;</td><td class="mdescRight">Recursive spinlock. <a href="group__odp__locks.html#ga46b28a220e7987dea0b5f6aec06732ea">More...</a><br /></td></tr>
<tr class="separator:ga46b28a220e7987dea0b5f6aec06732ea"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga42307bcff47225fc686f5f3d31a95be5"><td class="memItemLeft" align="right" valign="top">typedef struct <a class="el" href="structodp__ticketlock__s.html">odp_ticketlock_s</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__odp__locks.html#ga42307bcff47225fc686f5f3d31a95be5">odp_ticketlock_t</a></td></tr>
<tr class="memdesc:ga42307bcff47225fc686f5f3d31a95be5"><td class="mdescLeft">&#160;</td><td class="mdescRight">ODP ticketlock. <a href="group__odp__locks.html#ga42307bcff47225fc686f5f3d31a95be5">More...</a><br /></td></tr>
<tr class="separator:ga42307bcff47225fc686f5f3d31a95be5"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
Functions</h2></td></tr>
<tr class="memitem:gaf67ef097aa9d1970827d63626f3cd8e1"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__odp__locks.html#gaf67ef097aa9d1970827d63626f3cd8e1">odp_rwlock_init</a> (<a class="el" href="group__odp__locks.html#ga19a1eb1cac68aac075aaa12833dd0330">odp_rwlock_t</a> *rwlock)</td></tr>
<tr class="memdesc:gaf67ef097aa9d1970827d63626f3cd8e1"><td class="mdescLeft">&#160;</td><td class="mdescRight">Initialize a reader/writer lock. <a href="group__odp__locks.html#gaf67ef097aa9d1970827d63626f3cd8e1">More...</a><br /></td></tr>
<tr class="separator:gaf67ef097aa9d1970827d63626f3cd8e1"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga5494269be03ea8cb11a1c95e8cb6742a"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__odp__locks.html#ga5494269be03ea8cb11a1c95e8cb6742a">odp_rwlock_read_lock</a> (<a class="el" href="group__odp__locks.html#ga19a1eb1cac68aac075aaa12833dd0330">odp_rwlock_t</a> *rwlock)</td></tr>
<tr class="memdesc:ga5494269be03ea8cb11a1c95e8cb6742a"><td class="mdescLeft">&#160;</td><td class="mdescRight">Acquire read permission on a reader/writer lock. <a href="group__odp__locks.html#ga5494269be03ea8cb11a1c95e8cb6742a">More...</a><br /></td></tr>
<tr class="separator:ga5494269be03ea8cb11a1c95e8cb6742a"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:gaa123f82401752da91c66c05ef5c2c1c2"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__odp__locks.html#gaa123f82401752da91c66c05ef5c2c1c2">odp_rwlock_read_trylock</a> (<a class="el" href="group__odp__locks.html#ga19a1eb1cac68aac075aaa12833dd0330">odp_rwlock_t</a> *rwlock)</td></tr>
<tr class="memdesc:gaa123f82401752da91c66c05ef5c2c1c2"><td class="mdescLeft">&#160;</td><td class="mdescRight">Try to acquire read permission to a reader/writer lock. <a href="group__odp__locks.html#gaa123f82401752da91c66c05ef5c2c1c2">More...</a><br /></td></tr>
<tr class="separator:gaa123f82401752da91c66c05ef5c2c1c2"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga66b4d74e4932eab7ca378fcd73d3c041"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__odp__locks.html#ga66b4d74e4932eab7ca378fcd73d3c041">odp_rwlock_read_unlock</a> (<a class="el" href="group__odp__locks.html#ga19a1eb1cac68aac075aaa12833dd0330">odp_rwlock_t</a> *rwlock)</td></tr>
<tr class="memdesc:ga66b4d74e4932eab7ca378fcd73d3c041"><td class="mdescLeft">&#160;</td><td class="mdescRight">Release read permission on a reader/writer lock. <a href="group__odp__locks.html#ga66b4d74e4932eab7ca378fcd73d3c041">More...</a><br /></td></tr>
<tr class="separator:ga66b4d74e4932eab7ca378fcd73d3c041"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:gaac46b7d89638346edec229a17556e62d"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__odp__locks.html#gaac46b7d89638346edec229a17556e62d">odp_rwlock_write_lock</a> (<a class="el" href="group__odp__locks.html#ga19a1eb1cac68aac075aaa12833dd0330">odp_rwlock_t</a> *rwlock)</td></tr>
<tr class="memdesc:gaac46b7d89638346edec229a17556e62d"><td class="mdescLeft">&#160;</td><td class="mdescRight">Acquire write permission on a reader/writer lock. <a href="group__odp__locks.html#gaac46b7d89638346edec229a17556e62d">More...</a><br /></td></tr>
<tr class="separator:gaac46b7d89638346edec229a17556e62d"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga07d1796100fa63739d6efa586c41dcd8"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__odp__locks.html#ga07d1796100fa63739d6efa586c41dcd8">odp_rwlock_write_trylock</a> (<a class="el" href="group__odp__locks.html#ga19a1eb1cac68aac075aaa12833dd0330">odp_rwlock_t</a> *rwlock)</td></tr>
<tr class="memdesc:ga07d1796100fa63739d6efa586c41dcd8"><td class="mdescLeft">&#160;</td><td class="mdescRight">Try to acquire write permission to a reader/writer lock. <a href="group__odp__locks.html#ga07d1796100fa63739d6efa586c41dcd8">More...</a><br /></td></tr>
<tr class="separator:ga07d1796100fa63739d6efa586c41dcd8"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga9980a026d681322db4a179aea84c3b03"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__odp__locks.html#ga9980a026d681322db4a179aea84c3b03">odp_rwlock_write_unlock</a> (<a class="el" href="group__odp__locks.html#ga19a1eb1cac68aac075aaa12833dd0330">odp_rwlock_t</a> *rwlock)</td></tr>
<tr class="memdesc:ga9980a026d681322db4a179aea84c3b03"><td class="mdescLeft">&#160;</td><td class="mdescRight">Release write permission on a reader/writer lock. <a href="group__odp__locks.html#ga9980a026d681322db4a179aea84c3b03">More...</a><br /></td></tr>
<tr class="separator:ga9980a026d681322db4a179aea84c3b03"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga704f082261f02384bd8256f63a0f26d5"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__odp__locks.html#ga704f082261f02384bd8256f63a0f26d5">odp_rwlock_recursive_init</a> (<a class="el" href="group__odp__locks.html#ga20c1f9475bccb24bebf97389a05883d6">odp_rwlock_recursive_t</a> *lock)</td></tr>
<tr class="memdesc:ga704f082261f02384bd8256f63a0f26d5"><td class="mdescLeft">&#160;</td><td class="mdescRight">Initialize recursive rwlock. <a href="group__odp__locks.html#ga704f082261f02384bd8256f63a0f26d5">More...</a><br /></td></tr>
<tr class="separator:ga704f082261f02384bd8256f63a0f26d5"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga8929406a78386f812203591da110baa6"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__odp__locks.html#ga8929406a78386f812203591da110baa6">odp_rwlock_recursive_read_lock</a> (<a class="el" href="group__odp__locks.html#ga20c1f9475bccb24bebf97389a05883d6">odp_rwlock_recursive_t</a> *lock)</td></tr>
<tr class="memdesc:ga8929406a78386f812203591da110baa6"><td class="mdescLeft">&#160;</td><td class="mdescRight">Acquire recursive rwlock for reading. <a href="group__odp__locks.html#ga8929406a78386f812203591da110baa6">More...</a><br /></td></tr>
<tr class="separator:ga8929406a78386f812203591da110baa6"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:gaa8a54a821e838b204b9c2dd860e20a3e"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__odp__locks.html#gaa8a54a821e838b204b9c2dd860e20a3e">odp_rwlock_recursive_read_trylock</a> (<a class="el" href="group__odp__locks.html#ga20c1f9475bccb24bebf97389a05883d6">odp_rwlock_recursive_t</a> *lock)</td></tr>
<tr class="memdesc:gaa8a54a821e838b204b9c2dd860e20a3e"><td class="mdescLeft">&#160;</td><td class="mdescRight">Try to acquire recursive rwlock for reading. <a href="group__odp__locks.html#gaa8a54a821e838b204b9c2dd860e20a3e">More...</a><br /></td></tr>
<tr class="separator:gaa8a54a821e838b204b9c2dd860e20a3e"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga1c03f50749278ab7ce32bd3c11596a6f"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__odp__locks.html#ga1c03f50749278ab7ce32bd3c11596a6f">odp_rwlock_recursive_read_unlock</a> (<a class="el" href="group__odp__locks.html#ga20c1f9475bccb24bebf97389a05883d6">odp_rwlock_recursive_t</a> *lock)</td></tr>
<tr class="memdesc:ga1c03f50749278ab7ce32bd3c11596a6f"><td class="mdescLeft">&#160;</td><td class="mdescRight">Release recursive rwlock after reading. <a href="group__odp__locks.html#ga1c03f50749278ab7ce32bd3c11596a6f">More...</a><br /></td></tr>
<tr class="separator:ga1c03f50749278ab7ce32bd3c11596a6f"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:gafa13cba49b03a6e358ffa5c77fe65d43"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__odp__locks.html#gafa13cba49b03a6e358ffa5c77fe65d43">odp_rwlock_recursive_write_lock</a> (<a class="el" href="group__odp__locks.html#ga20c1f9475bccb24bebf97389a05883d6">odp_rwlock_recursive_t</a> *lock)</td></tr>
<tr class="memdesc:gafa13cba49b03a6e358ffa5c77fe65d43"><td class="mdescLeft">&#160;</td><td class="mdescRight">Acquire recursive rwlock for writing. <a href="group__odp__locks.html#gafa13cba49b03a6e358ffa5c77fe65d43">More...</a><br /></td></tr>
<tr class="separator:gafa13cba49b03a6e358ffa5c77fe65d43"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:gace9ce711a8101f0bea66aecbffa9c7c4"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__odp__locks.html#gace9ce711a8101f0bea66aecbffa9c7c4">odp_rwlock_recursive_write_trylock</a> (<a class="el" href="group__odp__locks.html#ga20c1f9475bccb24bebf97389a05883d6">odp_rwlock_recursive_t</a> *lock)</td></tr>
<tr class="memdesc:gace9ce711a8101f0bea66aecbffa9c7c4"><td class="mdescLeft">&#160;</td><td class="mdescRight">Try to acquire recursive rwlock for writing. <a href="group__odp__locks.html#gace9ce711a8101f0bea66aecbffa9c7c4">More...</a><br /></td></tr>
<tr class="separator:gace9ce711a8101f0bea66aecbffa9c7c4"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga71f75fbd570fefcc19c3373c1e2705db"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__odp__locks.html#ga71f75fbd570fefcc19c3373c1e2705db">odp_rwlock_recursive_write_unlock</a> (<a class="el" href="group__odp__locks.html#ga20c1f9475bccb24bebf97389a05883d6">odp_rwlock_recursive_t</a> *lock)</td></tr>
<tr class="memdesc:ga71f75fbd570fefcc19c3373c1e2705db"><td class="mdescLeft">&#160;</td><td class="mdescRight">Release recursive rwlock after writing. <a href="group__odp__locks.html#ga71f75fbd570fefcc19c3373c1e2705db">More...</a><br /></td></tr>
<tr class="separator:ga71f75fbd570fefcc19c3373c1e2705db"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga1df71223b903f21e6623376b4a48d334"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__odp__locks.html#ga1df71223b903f21e6623376b4a48d334">odp_spinlock_init</a> (<a class="el" href="group__odp__locks.html#ga14ed6642fda2939383057798a757e25e">odp_spinlock_t</a> *splock)</td></tr>
<tr class="memdesc:ga1df71223b903f21e6623376b4a48d334"><td class="mdescLeft">&#160;</td><td class="mdescRight">Initialize spin lock. <a href="group__odp__locks.html#ga1df71223b903f21e6623376b4a48d334">More...</a><br /></td></tr>
<tr class="separator:ga1df71223b903f21e6623376b4a48d334"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga15e51b78a0c9bd3fb94c669e7d448106"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__odp__locks.html#ga15e51b78a0c9bd3fb94c669e7d448106">odp_spinlock_lock</a> (<a class="el" href="group__odp__locks.html#ga14ed6642fda2939383057798a757e25e">odp_spinlock_t</a> *splock)</td></tr>
<tr class="memdesc:ga15e51b78a0c9bd3fb94c669e7d448106"><td class="mdescLeft">&#160;</td><td class="mdescRight">Acquire spin lock. <a href="group__odp__locks.html#ga15e51b78a0c9bd3fb94c669e7d448106">More...</a><br /></td></tr>
<tr class="separator:ga15e51b78a0c9bd3fb94c669e7d448106"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:gaf22f199c196f900f3fc3bb2844bc568f"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__odp__locks.html#gaf22f199c196f900f3fc3bb2844bc568f">odp_spinlock_trylock</a> (<a class="el" href="group__odp__locks.html#ga14ed6642fda2939383057798a757e25e">odp_spinlock_t</a> *splock)</td></tr>
<tr class="memdesc:gaf22f199c196f900f3fc3bb2844bc568f"><td class="mdescLeft">&#160;</td><td class="mdescRight">Try to acquire spin lock. <a href="group__odp__locks.html#gaf22f199c196f900f3fc3bb2844bc568f">More...</a><br /></td></tr>
<tr class="separator:gaf22f199c196f900f3fc3bb2844bc568f"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:gae491ba9e898505499a75273b54a688ce"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__odp__locks.html#gae491ba9e898505499a75273b54a688ce">odp_spinlock_unlock</a> (<a class="el" href="group__odp__locks.html#ga14ed6642fda2939383057798a757e25e">odp_spinlock_t</a> *splock)</td></tr>
<tr class="memdesc:gae491ba9e898505499a75273b54a688ce"><td class="mdescLeft">&#160;</td><td class="mdescRight">Release spin lock. <a href="group__odp__locks.html#gae491ba9e898505499a75273b54a688ce">More...</a><br /></td></tr>
<tr class="separator:gae491ba9e898505499a75273b54a688ce"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:gae08c7a835e414d1adef01d1a78c5b98b"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__odp__locks.html#gae08c7a835e414d1adef01d1a78c5b98b">odp_spinlock_is_locked</a> (<a class="el" href="group__odp__locks.html#ga14ed6642fda2939383057798a757e25e">odp_spinlock_t</a> *splock)</td></tr>
<tr class="memdesc:gae08c7a835e414d1adef01d1a78c5b98b"><td class="mdescLeft">&#160;</td><td class="mdescRight">Check if spin lock is busy (locked). <a href="group__odp__locks.html#gae08c7a835e414d1adef01d1a78c5b98b">More...</a><br /></td></tr>
<tr class="separator:gae08c7a835e414d1adef01d1a78c5b98b"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga63664308871da644d503924b0bb3c70d"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__odp__locks.html#ga63664308871da644d503924b0bb3c70d">odp_spinlock_recursive_init</a> (<a class="el" href="group__odp__locks.html#ga46b28a220e7987dea0b5f6aec06732ea">odp_spinlock_recursive_t</a> *lock)</td></tr>
<tr class="memdesc:ga63664308871da644d503924b0bb3c70d"><td class="mdescLeft">&#160;</td><td class="mdescRight">Initialize recursive spinlock. <a href="group__odp__locks.html#ga63664308871da644d503924b0bb3c70d">More...</a><br /></td></tr>
<tr class="separator:ga63664308871da644d503924b0bb3c70d"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:gae982da4156439fcd6103bd44c2e8b2ed"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__odp__locks.html#gae982da4156439fcd6103bd44c2e8b2ed">odp_spinlock_recursive_lock</a> (<a class="el" href="group__odp__locks.html#ga46b28a220e7987dea0b5f6aec06732ea">odp_spinlock_recursive_t</a> *lock)</td></tr>
<tr class="memdesc:gae982da4156439fcd6103bd44c2e8b2ed"><td class="mdescLeft">&#160;</td><td class="mdescRight">Acquire recursive spinlock. <a href="group__odp__locks.html#gae982da4156439fcd6103bd44c2e8b2ed">More...</a><br /></td></tr>
<tr class="separator:gae982da4156439fcd6103bd44c2e8b2ed"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga9ce048204e6a6b1ae6ffce8680afea66"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__odp__locks.html#ga9ce048204e6a6b1ae6ffce8680afea66">odp_spinlock_recursive_trylock</a> (<a class="el" href="group__odp__locks.html#ga46b28a220e7987dea0b5f6aec06732ea">odp_spinlock_recursive_t</a> *lock)</td></tr>
<tr class="memdesc:ga9ce048204e6a6b1ae6ffce8680afea66"><td class="mdescLeft">&#160;</td><td class="mdescRight">Try to acquire recursive spinlock. <a href="group__odp__locks.html#ga9ce048204e6a6b1ae6ffce8680afea66">More...</a><br /></td></tr>
<tr class="separator:ga9ce048204e6a6b1ae6ffce8680afea66"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga96a7a16e246bd7468cee2a298202f18a"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__odp__locks.html#ga96a7a16e246bd7468cee2a298202f18a">odp_spinlock_recursive_unlock</a> (<a class="el" href="group__odp__locks.html#ga46b28a220e7987dea0b5f6aec06732ea">odp_spinlock_recursive_t</a> *lock)</td></tr>
<tr class="memdesc:ga96a7a16e246bd7468cee2a298202f18a"><td class="mdescLeft">&#160;</td><td class="mdescRight">Release recursive spinlock. <a href="group__odp__locks.html#ga96a7a16e246bd7468cee2a298202f18a">More...</a><br /></td></tr>
<tr class="separator:ga96a7a16e246bd7468cee2a298202f18a"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:gabb529beb4db941142cb0d501784b85bd"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__odp__locks.html#gabb529beb4db941142cb0d501784b85bd">odp_spinlock_recursive_is_locked</a> (<a class="el" href="group__odp__locks.html#ga46b28a220e7987dea0b5f6aec06732ea">odp_spinlock_recursive_t</a> *lock)</td></tr>
<tr class="memdesc:gabb529beb4db941142cb0d501784b85bd"><td class="mdescLeft">&#160;</td><td class="mdescRight">Check if recursive spinlock is locked. <a href="group__odp__locks.html#gabb529beb4db941142cb0d501784b85bd">More...</a><br /></td></tr>
<tr class="separator:gabb529beb4db941142cb0d501784b85bd"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga072995b1e4b5542754658b4a3705f21e"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__odp__locks.html#ga072995b1e4b5542754658b4a3705f21e">odp_ticketlock_init</a> (<a class="el" href="group__odp__locks.html#ga42307bcff47225fc686f5f3d31a95be5">odp_ticketlock_t</a> *tklock)</td></tr>
<tr class="memdesc:ga072995b1e4b5542754658b4a3705f21e"><td class="mdescLeft">&#160;</td><td class="mdescRight">Initialize ticket lock. <a href="group__odp__locks.html#ga072995b1e4b5542754658b4a3705f21e">More...</a><br /></td></tr>
<tr class="separator:ga072995b1e4b5542754658b4a3705f21e"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga275b6329639104dd336ee95139683252"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__odp__locks.html#ga275b6329639104dd336ee95139683252">odp_ticketlock_lock</a> (<a class="el" href="group__odp__locks.html#ga42307bcff47225fc686f5f3d31a95be5">odp_ticketlock_t</a> *tklock)</td></tr>
<tr class="memdesc:ga275b6329639104dd336ee95139683252"><td class="mdescLeft">&#160;</td><td class="mdescRight">Acquire ticket lock. <a href="group__odp__locks.html#ga275b6329639104dd336ee95139683252">More...</a><br /></td></tr>
<tr class="separator:ga275b6329639104dd336ee95139683252"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga708f7063673e94c34fa1ea02b68e5b9a"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__odp__locks.html#ga708f7063673e94c34fa1ea02b68e5b9a">odp_ticketlock_trylock</a> (<a class="el" href="group__odp__locks.html#ga42307bcff47225fc686f5f3d31a95be5">odp_ticketlock_t</a> *tklock)</td></tr>
<tr class="memdesc:ga708f7063673e94c34fa1ea02b68e5b9a"><td class="mdescLeft">&#160;</td><td class="mdescRight">Try to acquire ticket lock. <a href="group__odp__locks.html#ga708f7063673e94c34fa1ea02b68e5b9a">More...</a><br /></td></tr>
<tr class="separator:ga708f7063673e94c34fa1ea02b68e5b9a"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga76d291fb3c387782fb75788fbbaba4c8"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__odp__locks.html#ga76d291fb3c387782fb75788fbbaba4c8">odp_ticketlock_unlock</a> (<a class="el" href="group__odp__locks.html#ga42307bcff47225fc686f5f3d31a95be5">odp_ticketlock_t</a> *tklock)</td></tr>
<tr class="memdesc:ga76d291fb3c387782fb75788fbbaba4c8"><td class="mdescLeft">&#160;</td><td class="mdescRight">Release ticket lock. <a href="group__odp__locks.html#ga76d291fb3c387782fb75788fbbaba4c8">More...</a><br /></td></tr>
<tr class="separator:ga76d291fb3c387782fb75788fbbaba4c8"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:gae1de66b66031ff4cff212f3184e62071"><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__odp__locks.html#gae1de66b66031ff4cff212f3184e62071">odp_ticketlock_is_locked</a> (<a class="el" href="group__odp__locks.html#ga42307bcff47225fc686f5f3d31a95be5">odp_ticketlock_t</a> *tklock)</td></tr>
<tr class="memdesc:gae1de66b66031ff4cff212f3184e62071"><td class="mdescLeft">&#160;</td><td class="mdescRight">Check if ticket lock is locked. <a href="group__odp__locks.html#gae1de66b66031ff4cff212f3184e62071">More...</a><br /></td></tr>
<tr class="separator:gae1de66b66031ff4cff212f3184e62071"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table>
<h2 class="groupheader">Typedef Documentation</h2>
<a id="ga19a1eb1cac68aac075aaa12833dd0330"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga19a1eb1cac68aac075aaa12833dd0330">&#9670;&nbsp;</a></span>odp_rwlock_t</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="group__odp__locks.html#ga19a1eb1cac68aac075aaa12833dd0330">odp_rwlock_t</a></td>
</tr>
</table>
</div><div class="memdoc">
<p>ODP reader/writer lock. </p>
</div>
</div>
<a id="ga20c1f9475bccb24bebf97389a05883d6"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga20c1f9475bccb24bebf97389a05883d6">&#9670;&nbsp;</a></span>odp_rwlock_recursive_t</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="group__odp__locks.html#ga20c1f9475bccb24bebf97389a05883d6">odp_rwlock_recursive_t</a></td>
</tr>
</table>
</div><div class="memdoc">
<p>Recursive rwlock. </p>
</div>
</div>
<a id="ga14ed6642fda2939383057798a757e25e"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga14ed6642fda2939383057798a757e25e">&#9670;&nbsp;</a></span>odp_spinlock_t</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="group__odp__locks.html#ga14ed6642fda2939383057798a757e25e">odp_spinlock_t</a></td>
</tr>
</table>
</div><div class="memdoc">
<p>ODP spinlock. </p>
</div>
</div>
<a id="ga46b28a220e7987dea0b5f6aec06732ea"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga46b28a220e7987dea0b5f6aec06732ea">&#9670;&nbsp;</a></span>odp_spinlock_recursive_t</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="group__odp__locks.html#ga46b28a220e7987dea0b5f6aec06732ea">odp_spinlock_recursive_t</a></td>
</tr>
</table>
</div><div class="memdoc">
<p>Recursive spinlock. </p>
</div>
</div>
<a id="ga42307bcff47225fc686f5f3d31a95be5"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga42307bcff47225fc686f5f3d31a95be5">&#9670;&nbsp;</a></span>odp_ticketlock_t</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="group__odp__locks.html#ga42307bcff47225fc686f5f3d31a95be5">odp_ticketlock_t</a></td>
</tr>
</table>
</div><div class="memdoc">
<p>ODP ticketlock. </p>
</div>
</div>
<h2 class="groupheader">Function Documentation</h2>
<a id="gaf67ef097aa9d1970827d63626f3cd8e1"></a>
<h2 class="memtitle"><span class="permalink"><a href="#gaf67ef097aa9d1970827d63626f3cd8e1">&#9670;&nbsp;</a></span>odp_rwlock_init()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void odp_rwlock_init </td>
<td>(</td>
<td class="paramtype"><a class="el" href="group__odp__locks.html#ga19a1eb1cac68aac075aaa12833dd0330">odp_rwlock_t</a> *&#160;</td>
<td class="paramname"><em>rwlock</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Initialize a reader/writer lock. </p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">rwlock</td><td>Pointer to a reader/writer lock </td></tr>
</table>
</dd>
</dl>
<dl class="section examples"><dt>Examples</dt><dd><a class="el" href="odp_lock_perf_8c-example.html#a30">odp_lock_perf.c</a>.</dd>
</dl>
</div>
</div>
<a id="ga5494269be03ea8cb11a1c95e8cb6742a"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga5494269be03ea8cb11a1c95e8cb6742a">&#9670;&nbsp;</a></span>odp_rwlock_read_lock()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void odp_rwlock_read_lock </td>
<td>(</td>
<td class="paramtype"><a class="el" href="group__odp__locks.html#ga19a1eb1cac68aac075aaa12833dd0330">odp_rwlock_t</a> *&#160;</td>
<td class="paramname"><em>rwlock</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Acquire read permission on a reader/writer lock. </p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">rwlock</td><td>Pointer to a reader/writer lock </td></tr>
</table>
</dd>
</dl>
<dl class="section examples"><dt>Examples</dt><dd><a class="el" href="odp_lock_perf_8c-example.html#a17">odp_lock_perf.c</a>.</dd>
</dl>
</div>
</div>
<a id="gaa123f82401752da91c66c05ef5c2c1c2"></a>
<h2 class="memtitle"><span class="permalink"><a href="#gaa123f82401752da91c66c05ef5c2c1c2">&#9670;&nbsp;</a></span>odp_rwlock_read_trylock()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">int odp_rwlock_read_trylock </td>
<td>(</td>
<td class="paramtype"><a class="el" href="group__odp__locks.html#ga19a1eb1cac68aac075aaa12833dd0330">odp_rwlock_t</a> *&#160;</td>
<td class="paramname"><em>rwlock</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Try to acquire read permission to a reader/writer lock. </p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">rwlock</td><td>Pointer to a reader/writer lock</td></tr>
</table>
</dd>
</dl>
<dl class="retval"><dt>Return values</dt><dd>
<table class="retval">
<tr><td class="paramname">0</td><td>Lock was not available for read access </td></tr>
<tr><td class="paramname">!0</td><td>Read access to lock acquired </td></tr>
</table>
</dd>
</dl>
</div>
</div>
<a id="ga66b4d74e4932eab7ca378fcd73d3c041"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga66b4d74e4932eab7ca378fcd73d3c041">&#9670;&nbsp;</a></span>odp_rwlock_read_unlock()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void odp_rwlock_read_unlock </td>
<td>(</td>
<td class="paramtype"><a class="el" href="group__odp__locks.html#ga19a1eb1cac68aac075aaa12833dd0330">odp_rwlock_t</a> *&#160;</td>
<td class="paramname"><em>rwlock</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Release read permission on a reader/writer lock. </p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">rwlock</td><td>Pointer to a reader/writer lock </td></tr>
</table>
</dd>
</dl>
<dl class="section examples"><dt>Examples</dt><dd><a class="el" href="odp_lock_perf_8c-example.html#a18">odp_lock_perf.c</a>.</dd>
</dl>
</div>
</div>
<a id="gaac46b7d89638346edec229a17556e62d"></a>
<h2 class="memtitle"><span class="permalink"><a href="#gaac46b7d89638346edec229a17556e62d">&#9670;&nbsp;</a></span>odp_rwlock_write_lock()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void odp_rwlock_write_lock </td>
<td>(</td>
<td class="paramtype"><a class="el" href="group__odp__locks.html#ga19a1eb1cac68aac075aaa12833dd0330">odp_rwlock_t</a> *&#160;</td>
<td class="paramname"><em>rwlock</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Acquire write permission on a reader/writer lock. </p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">rwlock</td><td>Pointer to a reader/writer lock </td></tr>
</table>
</dd>
</dl>
<dl class="section examples"><dt>Examples</dt><dd><a class="el" href="odp_lock_perf_8c-example.html#a15">odp_lock_perf.c</a>.</dd>
</dl>
</div>
</div>
<a id="ga07d1796100fa63739d6efa586c41dcd8"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga07d1796100fa63739d6efa586c41dcd8">&#9670;&nbsp;</a></span>odp_rwlock_write_trylock()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">int odp_rwlock_write_trylock </td>
<td>(</td>
<td class="paramtype"><a class="el" href="group__odp__locks.html#ga19a1eb1cac68aac075aaa12833dd0330">odp_rwlock_t</a> *&#160;</td>
<td class="paramname"><em>rwlock</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Try to acquire write permission to a reader/writer lock. </p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">rwlock</td><td>Pointer to a reader/writer lock</td></tr>
</table>
</dd>
</dl>
<dl class="retval"><dt>Return values</dt><dd>
<table class="retval">
<tr><td class="paramname">0</td><td>Lock was not available for write access </td></tr>
<tr><td class="paramname">!0</td><td>Write access to lock acquired </td></tr>
</table>
</dd>
</dl>
</div>
</div>
<a id="ga9980a026d681322db4a179aea84c3b03"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga9980a026d681322db4a179aea84c3b03">&#9670;&nbsp;</a></span>odp_rwlock_write_unlock()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void odp_rwlock_write_unlock </td>
<td>(</td>
<td class="paramtype"><a class="el" href="group__odp__locks.html#ga19a1eb1cac68aac075aaa12833dd0330">odp_rwlock_t</a> *&#160;</td>
<td class="paramname"><em>rwlock</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Release write permission on a reader/writer lock. </p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">rwlock</td><td>Pointer to a reader/writer lock </td></tr>
</table>
</dd>
</dl>
<dl class="section examples"><dt>Examples</dt><dd><a class="el" href="odp_lock_perf_8c-example.html#a16">odp_lock_perf.c</a>.</dd>
</dl>
</div>
</div>
<a id="ga704f082261f02384bd8256f63a0f26d5"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga704f082261f02384bd8256f63a0f26d5">&#9670;&nbsp;</a></span>odp_rwlock_recursive_init()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void odp_rwlock_recursive_init </td>
<td>(</td>
<td class="paramtype"><a class="el" href="group__odp__locks.html#ga20c1f9475bccb24bebf97389a05883d6">odp_rwlock_recursive_t</a> *&#160;</td>
<td class="paramname"><em>lock</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Initialize recursive rwlock. </p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">lock</td><td>Pointer to a lock </td></tr>
</table>
</dd>
</dl>
<dl class="section examples"><dt>Examples</dt><dd><a class="el" href="odp_lock_perf_8c-example.html#a31">odp_lock_perf.c</a>.</dd>
</dl>
</div>
</div>
<a id="ga8929406a78386f812203591da110baa6"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga8929406a78386f812203591da110baa6">&#9670;&nbsp;</a></span>odp_rwlock_recursive_read_lock()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void odp_rwlock_recursive_read_lock </td>
<td>(</td>
<td class="paramtype"><a class="el" href="group__odp__locks.html#ga20c1f9475bccb24bebf97389a05883d6">odp_rwlock_recursive_t</a> *&#160;</td>
<td class="paramname"><em>lock</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Acquire recursive rwlock for reading. </p>
<p>This call allows the thread to acquire the same lock multiple times for reading. The lock cannot be acquired for writing while holding it for reading.</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">lock</td><td>Pointer to a lock </td></tr>
</table>
</dd>
</dl>
<dl class="section examples"><dt>Examples</dt><dd><a class="el" href="odp_lock_perf_8c-example.html#a21">odp_lock_perf.c</a>.</dd>
</dl>
</div>
</div>
<a id="gaa8a54a821e838b204b9c2dd860e20a3e"></a>
<h2 class="memtitle"><span class="permalink"><a href="#gaa8a54a821e838b204b9c2dd860e20a3e">&#9670;&nbsp;</a></span>odp_rwlock_recursive_read_trylock()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">int odp_rwlock_recursive_read_trylock </td>
<td>(</td>
<td class="paramtype"><a class="el" href="group__odp__locks.html#ga20c1f9475bccb24bebf97389a05883d6">odp_rwlock_recursive_t</a> *&#160;</td>
<td class="paramname"><em>lock</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Try to acquire recursive rwlock for reading. </p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">lock</td><td>Pointer to a lock</td></tr>
</table>
</dd>
</dl>
<dl class="retval"><dt>Return values</dt><dd>
<table class="retval">
<tr><td class="paramname">0</td><td>Lock was not available for read access </td></tr>
<tr><td class="paramname">!0</td><td>Read access to lock acquired </td></tr>
</table>
</dd>
</dl>
</div>
</div>
<a id="ga1c03f50749278ab7ce32bd3c11596a6f"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga1c03f50749278ab7ce32bd3c11596a6f">&#9670;&nbsp;</a></span>odp_rwlock_recursive_read_unlock()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void odp_rwlock_recursive_read_unlock </td>
<td>(</td>
<td class="paramtype"><a class="el" href="group__odp__locks.html#ga20c1f9475bccb24bebf97389a05883d6">odp_rwlock_recursive_t</a> *&#160;</td>
<td class="paramname"><em>lock</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Release recursive rwlock after reading. </p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">lock</td><td>Pointer to a lock </td></tr>
</table>
</dd>
</dl>
<dl class="section examples"><dt>Examples</dt><dd><a class="el" href="odp_lock_perf_8c-example.html#a22">odp_lock_perf.c</a>.</dd>
</dl>
</div>
</div>
<a id="gafa13cba49b03a6e358ffa5c77fe65d43"></a>
<h2 class="memtitle"><span class="permalink"><a href="#gafa13cba49b03a6e358ffa5c77fe65d43">&#9670;&nbsp;</a></span>odp_rwlock_recursive_write_lock()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void odp_rwlock_recursive_write_lock </td>
<td>(</td>
<td class="paramtype"><a class="el" href="group__odp__locks.html#ga20c1f9475bccb24bebf97389a05883d6">odp_rwlock_recursive_t</a> *&#160;</td>
<td class="paramname"><em>lock</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Acquire recursive rwlock for writing. </p>
<p>This call allows the thread to acquire the same lock multiple times for writing. The lock cannot be acquired for reading while holding it for writing.</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">lock</td><td>Pointer to a lock </td></tr>
</table>
</dd>
</dl>
<dl class="section examples"><dt>Examples</dt><dd><a class="el" href="odp_lock_perf_8c-example.html#a19">odp_lock_perf.c</a>.</dd>
</dl>
</div>
</div>
<a id="gace9ce711a8101f0bea66aecbffa9c7c4"></a>
<h2 class="memtitle"><span class="permalink"><a href="#gace9ce711a8101f0bea66aecbffa9c7c4">&#9670;&nbsp;</a></span>odp_rwlock_recursive_write_trylock()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">int odp_rwlock_recursive_write_trylock </td>
<td>(</td>
<td class="paramtype"><a class="el" href="group__odp__locks.html#ga20c1f9475bccb24bebf97389a05883d6">odp_rwlock_recursive_t</a> *&#160;</td>
<td class="paramname"><em>lock</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Try to acquire recursive rwlock for writing. </p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">lock</td><td>Pointer to a lock</td></tr>
</table>
</dd>
</dl>
<dl class="retval"><dt>Return values</dt><dd>
<table class="retval">
<tr><td class="paramname">0</td><td>Lock was not available for write access </td></tr>
<tr><td class="paramname">!0</td><td>Write access to lock acquired </td></tr>
</table>
</dd>
</dl>
</div>
</div>
<a id="ga71f75fbd570fefcc19c3373c1e2705db"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga71f75fbd570fefcc19c3373c1e2705db">&#9670;&nbsp;</a></span>odp_rwlock_recursive_write_unlock()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void odp_rwlock_recursive_write_unlock </td>
<td>(</td>
<td class="paramtype"><a class="el" href="group__odp__locks.html#ga20c1f9475bccb24bebf97389a05883d6">odp_rwlock_recursive_t</a> *&#160;</td>
<td class="paramname"><em>lock</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Release recursive rwlock after writing. </p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">lock</td><td>Pointer to a lock </td></tr>
</table>
</dd>
</dl>
<dl class="section examples"><dt>Examples</dt><dd><a class="el" href="odp_lock_perf_8c-example.html#a20">odp_lock_perf.c</a>.</dd>
</dl>
</div>
</div>
<a id="ga1df71223b903f21e6623376b4a48d334"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga1df71223b903f21e6623376b4a48d334">&#9670;&nbsp;</a></span>odp_spinlock_init()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void odp_spinlock_init </td>
<td>(</td>
<td class="paramtype"><a class="el" href="group__odp__locks.html#ga14ed6642fda2939383057798a757e25e">odp_spinlock_t</a> *&#160;</td>
<td class="paramname"><em>splock</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Initialize spin lock. </p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">splock</td><td>Pointer to a spin lock </td></tr>
</table>
</dd>
</dl>
<dl class="section examples"><dt>Examples</dt><dd><a class="el" href="odp_lock_perf_8c-example.html#a28">odp_lock_perf.c</a>, and <a class="el" href="odp_timer_stress_8c-example.html#a26">odp_timer_stress.c</a>.</dd>
</dl>
</div>
</div>
<a id="ga15e51b78a0c9bd3fb94c669e7d448106"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga15e51b78a0c9bd3fb94c669e7d448106">&#9670;&nbsp;</a></span>odp_spinlock_lock()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void odp_spinlock_lock </td>
<td>(</td>
<td class="paramtype"><a class="el" href="group__odp__locks.html#ga14ed6642fda2939383057798a757e25e">odp_spinlock_t</a> *&#160;</td>
<td class="paramname"><em>splock</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Acquire spin lock. </p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">splock</td><td>Pointer to a spin lock </td></tr>
</table>
</dd>
</dl>
<dl class="section examples"><dt>Examples</dt><dd><a class="el" href="odp_lock_perf_8c-example.html#a10">odp_lock_perf.c</a>, and <a class="el" href="odp_timer_stress_8c-example.html#a129">odp_timer_stress.c</a>.</dd>
</dl>
</div>
</div>
<a id="gaf22f199c196f900f3fc3bb2844bc568f"></a>
<h2 class="memtitle"><span class="permalink"><a href="#gaf22f199c196f900f3fc3bb2844bc568f">&#9670;&nbsp;</a></span>odp_spinlock_trylock()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">int odp_spinlock_trylock </td>
<td>(</td>
<td class="paramtype"><a class="el" href="group__odp__locks.html#ga14ed6642fda2939383057798a757e25e">odp_spinlock_t</a> *&#160;</td>
<td class="paramname"><em>splock</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Try to acquire spin lock. </p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">splock</td><td>Pointer to a spin lock</td></tr>
</table>
</dd>
</dl>
<dl class="retval"><dt>Return values</dt><dd>
<table class="retval">
<tr><td class="paramname">0</td><td>lock not acquired </td></tr>
<tr><td class="paramname">!0</td><td>lock acquired </td></tr>
</table>
</dd>
</dl>
</div>
</div>
<a id="gae491ba9e898505499a75273b54a688ce"></a>
<h2 class="memtitle"><span class="permalink"><a href="#gae491ba9e898505499a75273b54a688ce">&#9670;&nbsp;</a></span>odp_spinlock_unlock()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void odp_spinlock_unlock </td>
<td>(</td>
<td class="paramtype"><a class="el" href="group__odp__locks.html#ga14ed6642fda2939383057798a757e25e">odp_spinlock_t</a> *&#160;</td>
<td class="paramname"><em>splock</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Release spin lock. </p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">splock</td><td>Pointer to a spin lock </td></tr>
</table>
</dd>
</dl>
<dl class="section examples"><dt>Examples</dt><dd><a class="el" href="odp_lock_perf_8c-example.html#a11">odp_lock_perf.c</a>, and <a class="el" href="odp_timer_stress_8c-example.html#a130">odp_timer_stress.c</a>.</dd>
</dl>
</div>
</div>
<a id="gae08c7a835e414d1adef01d1a78c5b98b"></a>
<h2 class="memtitle"><span class="permalink"><a href="#gae08c7a835e414d1adef01d1a78c5b98b">&#9670;&nbsp;</a></span>odp_spinlock_is_locked()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">int odp_spinlock_is_locked </td>
<td>(</td>
<td class="paramtype"><a class="el" href="group__odp__locks.html#ga14ed6642fda2939383057798a757e25e">odp_spinlock_t</a> *&#160;</td>
<td class="paramname"><em>splock</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Check if spin lock is busy (locked). </p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">splock</td><td>Pointer to a spin lock</td></tr>
</table>
</dd>
</dl>
<dl class="retval"><dt>Return values</dt><dd>
<table class="retval">
<tr><td class="paramname">1</td><td>lock busy (locked) </td></tr>
<tr><td class="paramname">0</td><td>lock not busy. </td></tr>
</table>
</dd>
</dl>
</div>
</div>
<a id="ga63664308871da644d503924b0bb3c70d"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga63664308871da644d503924b0bb3c70d">&#9670;&nbsp;</a></span>odp_spinlock_recursive_init()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void odp_spinlock_recursive_init </td>
<td>(</td>
<td class="paramtype"><a class="el" href="group__odp__locks.html#ga46b28a220e7987dea0b5f6aec06732ea">odp_spinlock_recursive_t</a> *&#160;</td>
<td class="paramname"><em>lock</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Initialize recursive spinlock. </p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">lock</td><td>Pointer to a lock </td></tr>
</table>
</dd>
</dl>
<dl class="section examples"><dt>Examples</dt><dd><a class="el" href="odp_lock_perf_8c-example.html#a29">odp_lock_perf.c</a>.</dd>
</dl>
</div>
</div>
<a id="gae982da4156439fcd6103bd44c2e8b2ed"></a>
<h2 class="memtitle"><span class="permalink"><a href="#gae982da4156439fcd6103bd44c2e8b2ed">&#9670;&nbsp;</a></span>odp_spinlock_recursive_lock()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void odp_spinlock_recursive_lock </td>
<td>(</td>
<td class="paramtype"><a class="el" href="group__odp__locks.html#ga46b28a220e7987dea0b5f6aec06732ea">odp_spinlock_recursive_t</a> *&#160;</td>
<td class="paramname"><em>lock</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Acquire recursive spinlock. </p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">lock</td><td>Pointer to a lock </td></tr>
</table>
</dd>
</dl>
<dl class="section examples"><dt>Examples</dt><dd><a class="el" href="odp_lock_perf_8c-example.html#a12">odp_lock_perf.c</a>.</dd>
</dl>
</div>
</div>
<a id="ga9ce048204e6a6b1ae6ffce8680afea66"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga9ce048204e6a6b1ae6ffce8680afea66">&#9670;&nbsp;</a></span>odp_spinlock_recursive_trylock()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">int odp_spinlock_recursive_trylock </td>
<td>(</td>
<td class="paramtype"><a class="el" href="group__odp__locks.html#ga46b28a220e7987dea0b5f6aec06732ea">odp_spinlock_recursive_t</a> *&#160;</td>
<td class="paramname"><em>lock</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Try to acquire recursive spinlock. </p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">lock</td><td>Pointer to a lock</td></tr>
</table>
</dd>
</dl>
<dl class="retval"><dt>Return values</dt><dd>
<table class="retval">
<tr><td class="paramname">1</td><td>lock acquired </td></tr>
<tr><td class="paramname">0</td><td>lock not acquired </td></tr>
</table>
</dd>
</dl>
</div>
</div>
<a id="ga96a7a16e246bd7468cee2a298202f18a"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga96a7a16e246bd7468cee2a298202f18a">&#9670;&nbsp;</a></span>odp_spinlock_recursive_unlock()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void odp_spinlock_recursive_unlock </td>
<td>(</td>
<td class="paramtype"><a class="el" href="group__odp__locks.html#ga46b28a220e7987dea0b5f6aec06732ea">odp_spinlock_recursive_t</a> *&#160;</td>
<td class="paramname"><em>lock</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Release recursive spinlock. </p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">lock</td><td>Pointer to a lock </td></tr>
</table>
</dd>
</dl>
<dl class="section examples"><dt>Examples</dt><dd><a class="el" href="odp_lock_perf_8c-example.html#a13">odp_lock_perf.c</a>.</dd>
</dl>
</div>
</div>
<a id="gabb529beb4db941142cb0d501784b85bd"></a>
<h2 class="memtitle"><span class="permalink"><a href="#gabb529beb4db941142cb0d501784b85bd">&#9670;&nbsp;</a></span>odp_spinlock_recursive_is_locked()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">int odp_spinlock_recursive_is_locked </td>
<td>(</td>
<td class="paramtype"><a class="el" href="group__odp__locks.html#ga46b28a220e7987dea0b5f6aec06732ea">odp_spinlock_recursive_t</a> *&#160;</td>
<td class="paramname"><em>lock</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Check if recursive spinlock is locked. </p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">lock</td><td>Pointer to a lock</td></tr>
</table>
</dd>
</dl>
<dl class="retval"><dt>Return values</dt><dd>
<table class="retval">
<tr><td class="paramname">1</td><td>lock is locked </td></tr>
<tr><td class="paramname">0</td><td>lock is not locked </td></tr>
</table>
</dd>
</dl>
</div>
</div>
<a id="ga072995b1e4b5542754658b4a3705f21e"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga072995b1e4b5542754658b4a3705f21e">&#9670;&nbsp;</a></span>odp_ticketlock_init()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void odp_ticketlock_init </td>
<td>(</td>
<td class="paramtype"><a class="el" href="group__odp__locks.html#ga42307bcff47225fc686f5f3d31a95be5">odp_ticketlock_t</a> *&#160;</td>
<td class="paramname"><em>tklock</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Initialize ticket lock. </p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">tklock</td><td>Pointer to a ticket lock </td></tr>
</table>
</dd>
</dl>
<dl class="section examples"><dt>Examples</dt><dd><a class="el" href="odp_dma_perf_8c-example.html#a24">odp_dma_perf.c</a>, <a class="el" href="odp_lock_perf_8c-example.html#a32">odp_lock_perf.c</a>, and <a class="el" href="odp_timer_accuracy_8c-example.html#a85">odp_timer_accuracy.c</a>.</dd>
</dl>
</div>
</div>
<a id="ga275b6329639104dd336ee95139683252"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga275b6329639104dd336ee95139683252">&#9670;&nbsp;</a></span>odp_ticketlock_lock()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void odp_ticketlock_lock </td>
<td>(</td>
<td class="paramtype"><a class="el" href="group__odp__locks.html#ga42307bcff47225fc686f5f3d31a95be5">odp_ticketlock_t</a> *&#160;</td>
<td class="paramname"><em>tklock</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Acquire ticket lock. </p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">tklock</td><td>Pointer to a ticket lock </td></tr>
</table>
</dd>
</dl>
<dl class="section examples"><dt>Examples</dt><dd><a class="el" href="odp_lock_perf_8c-example.html#a24">odp_lock_perf.c</a>, and <a class="el" href="odp_timer_accuracy_8c-example.html#a115">odp_timer_accuracy.c</a>.</dd>
</dl>
</div>
</div>
<a id="ga708f7063673e94c34fa1ea02b68e5b9a"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga708f7063673e94c34fa1ea02b68e5b9a">&#9670;&nbsp;</a></span>odp_ticketlock_trylock()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">int odp_ticketlock_trylock </td>
<td>(</td>
<td class="paramtype"><a class="el" href="group__odp__locks.html#ga42307bcff47225fc686f5f3d31a95be5">odp_ticketlock_t</a> *&#160;</td>
<td class="paramname"><em>tklock</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Try to acquire ticket lock. </p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">tklock</td><td>Pointer to a ticket lock</td></tr>
</table>
</dd>
</dl>
<dl class="retval"><dt>Return values</dt><dd>
<table class="retval">
<tr><td class="paramname">1</td><td>lock acquired </td></tr>
<tr><td class="paramname">0</td><td>lock not acquired </td></tr>
</table>
</dd>
</dl>
<dl class="section examples"><dt>Examples</dt><dd><a class="el" href="odp_dma_perf_8c-example.html#a95">odp_dma_perf.c</a>.</dd>
</dl>
</div>
</div>
<a id="ga76d291fb3c387782fb75788fbbaba4c8"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga76d291fb3c387782fb75788fbbaba4c8">&#9670;&nbsp;</a></span>odp_ticketlock_unlock()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void odp_ticketlock_unlock </td>
<td>(</td>
<td class="paramtype"><a class="el" href="group__odp__locks.html#ga42307bcff47225fc686f5f3d31a95be5">odp_ticketlock_t</a> *&#160;</td>
<td class="paramname"><em>tklock</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Release ticket lock. </p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">tklock</td><td>Pointer to a ticket lock </td></tr>
</table>
</dd>
</dl>
<dl class="section examples"><dt>Examples</dt><dd><a class="el" href="odp_dma_perf_8c-example.html#a96">odp_dma_perf.c</a>, <a class="el" href="odp_lock_perf_8c-example.html#a25">odp_lock_perf.c</a>, and <a class="el" href="odp_timer_accuracy_8c-example.html#a119">odp_timer_accuracy.c</a>.</dd>
</dl>
</div>
</div>
<a id="gae1de66b66031ff4cff212f3184e62071"></a>
<h2 class="memtitle"><span class="permalink"><a href="#gae1de66b66031ff4cff212f3184e62071">&#9670;&nbsp;</a></span>odp_ticketlock_is_locked()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">int odp_ticketlock_is_locked </td>
<td>(</td>
<td class="paramtype"><a class="el" href="group__odp__locks.html#ga42307bcff47225fc686f5f3d31a95be5">odp_ticketlock_t</a> *&#160;</td>
<td class="paramname"><em>tklock</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Check if ticket lock is locked. </p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">tklock</td><td>Pointer to a ticket lock</td></tr>
</table>
</dd>
</dl>
<dl class="retval"><dt>Return values</dt><dd>
<table class="retval">
<tr><td class="paramname">1</td><td>the lock is busy (locked) </td></tr>
<tr><td class="paramname">0</td><td>the lock is available (unlocked) </td></tr>
</table>
</dd>
</dl>
</div>
</div>
</div><!-- contents -->
</div><!-- doc-content -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.1 </li>
</ul>
</div>
</body>
</html>