ibm-information-center/dist/eclipse/plugins/i5OS.ic.apis_5.4.0.1/users_60.htm

202 lines
6.0 KiB
HTML

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta name="Copyright" content="Copyright (c) 2006 by IBM Corporation">
<title>pthread_mutex_destroy()--Destroy Mutex</title>
<!-- All rights reserved. Licensed Materials Property of IBM -->
<!-- US Government Users Restricted Rights -->
<!-- Use, duplication or disclosure restricted by -->
<!-- GSA ADP Schedule Contract with IBM Corp. -->
<!-- Begin Header Records ========================================== -->
<!-- NETMG2 SCRIPT A converted by B2H R4.1 (346) (CMS) by HOLTJM at -->
<!-- RCHVMW2 on 29 Jan 1999 at 10:01:37 -->
<!--File Edited November 2001 -->
<!--End Header Records -->
<link rel="stylesheet" type="text/css" href="../rzahg/ic.css">
</head>
<body>
<!-- Java sync-link -->
<script language="Javascript" src="../rzahg/synch.js" type="text/javascript">
</script>
<a name="Top_Of_Page"></a>
<h2>pthread_mutex_destroy()--Destroy Mutex</h2>
<div class="box" style="width: 60%;">
<br>
&nbsp;&nbsp;Syntax:
<pre>
#include &lt;pthread.h&gt;
int pthread_mutex_destroy(pthread_mutex_t *mutex);
</pre>
&nbsp;&nbsp;Service Program Name: QP0WPTHR<br>
<!-- iddvc RMBR -->
<br>
&nbsp;&nbsp;Default Public Authority: *USE <br>
<!-- iddvc RMBR -->
<br>
&nbsp;&nbsp;Threadsafe: Yes<br>
<!-- iddvc RMBR -->
<br>
&nbsp;&nbsp;Signal Safe: Yes<br>
<!-- iddvc RMBR -->
<br>
</div>
<p>The <strong>pthread_mutex_destroy</strong>() function destroys the named
mutex. The destroyed mutex can no longer be used.</p>
<p>If <strong>pthread_mutex_destroy</strong>() is called on a mutex that is
locked by another thread, the request fails with an <strong>EBUSY</strong>
error. If the calling thread has the mutex locked, any other threads waiting
for the mutex using a call to <strong>pthread_mutex_lock</strong>() at the time
of the call to <strong>pthread_mutex_destroy</strong>() fails with the <strong>
EDESTROYED</strong> error.</p>
<p>Mutex initialization using the <strong>PTHREAD_MUTEX_INITIALIZER</strong>
does not immediately initialize the mutex. Instead, on first use, <strong>
pthread_mutex_lock</strong>() or <strong>pthread_mutex_trylock</strong>()
branches into a slow path and causes the initialization of the mutex. Because a
mutex is not just a simple memory object and requires that some resources be
allocated by the system, an attempt to call <strong>
pthread_mutex_destroy</strong>() or <strong>pthread_mutex_unlock</strong>() on
a mutex that has statically initialized using <strong>
PTHREAD_MUTEX_INITIALER</strong> and was not yet locked causes an <strong>
EINVAL</strong> error.</p>
<p>Every mutex must eventually be destroyed with <strong>
pthread_mutex_destroy</strong>(). The machine eventually detects the error if a
mutex is not destroyed, but the storage is deallocated or corrupted. The
machine then creates LIC log synchronization entries that indicate the failure
to help debug the problem. Large numbers of these entries can affect system
performance and hinder debug capabilities for other system problems. Always use
<strong>pthread_mutex_destroy</strong>() before freeing mutex storage to
prevent these debug LIC log entries.</p>
<p><strong>Note:</strong> Once a mutex is created, it cannot be validly copied
or moved to a new location.</p>
<br>
<h3>Authorities and Locks</h3>
<p>None.</p>
<br>
<h3>Parameters</h3>
<dl>
<dt><strong>mutex</strong></dt>
<dd>(Input) Address of the mutex to be destroyed</dd>
</dl>
<br>
<h3>Return Value</h3>
<dl>
<dt><strong>0</strong></dt>
<dd><strong>pthread_mutex_destroy</strong>() was successful.</dd>
<dt><strong>value</strong></dt>
<dd><strong>pthread_mutex_destroy</strong>() was not successful. <em>value</em>
is set to indicate the error condition.</dd>
</dl>
<br>
<h3>Error Conditions</h3>
<p>If <strong>pthread_mutex_destroy</strong>() was not successful, the error
condition returned usually indicates one of the following errors. Under some
conditions, the value returned could indicate an error other than those listed
here.</p>
<dl>
<dt><em>[EBUSY]</em></dt>
<dd><p>The mutex is currently owned by another thread.</p></dd>
<dt><em>[EINVAL]</em></dt>
<dd><p>The value specified for the argument is not correct.</p></dd>
</dl>
<br>
<h3>Related Information</h3>
<ul>
<li>The &lt;<strong>pthread.h</strong>&gt; header file. See <a href=
"rzah4hed.htm">Header files for Pthread functions</a>.<br><br></li>
<li><a href="users_61.htm">pthread_mutex_init()</a>--Initialize Mutex<br><br></li>
<li><a href="users_62.htm">pthread_mutex_lock()</a>--Lock Mutex<br><br></li>
<li><a href="users_64.htm">pthread_mutex_trylock()</a>--Lock Mutex with No
Wait<br><br></li>
<li><a href="users_65.htm">pthread_mutex_unlock()</a>--Unlock Mutex</li>
</ul>
<br>
<h3>Example</h3>
<p>See <a href="../apiref/aboutapis.htm#codedisclaimer">Code disclaimer information</a>
for information pertaining to code examples.</p>
<pre>
#include &lt;pthread.h&gt;
#include &lt;stdio.h&gt;
#include "check.h"
pthread_mutex_t mutex;
int main(int argc, char **argv)
{
int rc=0;
pthread_mutexattr_t mta;
printf("Entering testcase\n");
printf("Create the mutex using the NULL attributes (default)\n");
rc = pthread_mutex_init(&amp;mutex, NULL);
checkResults("pthread_mutex_init(NULL)\n", rc);
printf("Destroy all mutexes\n");
pthread_mutex_destroy(&amp;mutex);
checkResults("pthread_mutex_destroy()\n", rc);
printf("Main completed\n");
return 0;
}
</pre>
<p><strong>Output:</strong></p>
<pre>
Entering testcase
Create the mutex using the NULL attributes (default)
Destroy all mutexes
Main completed
</pre>
<hr>
API introduced: V4R3
<hr>
<center>
<table cellpadding="2" cellspacing="2">
<tr align="center">
<td valign="middle" align="center"><a href="#Top_Of_Page">Top</a> | <a href=
"rzah4mst.htm">Pthread APIs</a> | <a href="aplist.htm">APIs by
category</a></td>
</tr>
</table>
</center>
</body>
</html>