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

239 lines
6.7 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_getunique_np()--Retrieve Unique ID for Target Thread</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_getunique_np()--Retrieve Unique ID for Target Thread</h2>
<div class="box" style="width: 70%;">
<br>
&nbsp;&nbsp;Syntax:
<pre>
#include &lt;pthread.h&gt;
int pthread_getunique_np(pthread_t *thread, pthread_id_np_t *id);
</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_getunique_np</strong>() function retrieves the unique
integral identifier that can be used to identify the thread in some context for
application debugging or tracing support.</p>
<p>In some implementations, the thread ID is equivalent to the pthread_t type.
In the i5/OS implementation, the pthread_t is an opaque Pthread handle. For
the ability to identify a thread using a thread ID (unique number), the <strong>
pthread_getunique_np</strong>() and <strong>pthread_getthreadid_np</strong>()
interfaces are provided.</p>
<p>The i5/OS machine implementation of threads provides a 64-bit thread ID.
The thread ID is returned as a structure containing the high and low order 4
bytes of the 64-bit ID. This allows applications created by compilers that do
not yet support 64-bit integral values to effectively use the 64-bit thread
ID.</p>
<p>If your code requires the unique integer identifier for the calling thread
often, or in a loop, the <strong>pthread_getthreadid_np</strong>() function can
significantly improve performance over the combination of <strong>
pthread_self</strong>() and <strong>pthread_getunique_np</strong>() calls that
provide equivalent behavior.</p>
<p>For example:</p>
<pre>
pthread_id_np_t tid;
tid = pthread_getthreadid_np();
</pre>
<p>is significantly faster than these calls, but provides the same
behavior.</p>
<pre>
pthread_id_np_t tid;
pthread_t self;
self = pthread_self();
pthread_getunique_np(&amp;self, &amp;tid);
</pre>
<p>As always, if you are calling any function too often, you can improve
performance by storing the results in a variable or passing to other functions
that require the results.</p>
<p><strong>Note:</strong>This function is not portable.</p>
<br>
<h3>Authorities and Locks</h3>
<p>None.</p>
<br>
<h3>Parameters</h3>
<dl>
<dt><strong>thread</strong></dt>
<dd>(Input) Address of the thread to retrieve the unique integer ID for<br><br></dd>
<dt><strong>id</strong></dt>
<dd>(Output) Address of the thread ID structure to contain the 64-bit thread
ID.</dd>
</dl>
<br>
<h3>Return Value</h3>
<dl>
<dt><strong>0</strong></dt>
<dd><strong>pthread_getunique_np</strong>() was successful.<br><br></dd>
<dt><strong>value</strong></dt>
<dd><strong>pthread_getunique_np</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_getunique_np</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>[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_28.htm">pthread_self()</a>--Get Pthread Handle<br><br></li>
<li><a href="users_22.htm">pthread_getthreadid_np()</a>--Retrieve Unique ID for
Calling Thread<br><br></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>
#define _MULTI_THREADED
#include &lt;pthread.h&gt;
#include &lt;stdio.h&gt;
#include "check.h"
#define NUMTHREADS 3
void *threadfunc(void *parm)
{
pthread_id_np_t tid;
pthread_t me = pthread_self();
pthread_getunique_np(&amp;me, &amp;tid);
printf("Thread 0x%.8x %.8x started\n", tid);
return NULL;
}
int main(int argc, char **argv)
{
pthread_t thread[NUMTHREADS];
int rc=0;
pthread_id_np_t tid;
int i=0;
pthread_t me = pthread_self();
printf("Enter Testcase - %s\n", argv[0]);
pthread_getunique_np(&amp;me, &amp;tid);
printf("Main Thread 0x%.8x %.8x\n", tid);
printf("Create %d threads using joinable attributes\n",
NUMTHREADS);
for (i=0; i&lt;NUMTHREADS; ++i) {
rc = pthread_create(&amp;thread[i], NULL, threadfunc, NULL);
checkResults("pthread_create()\n", rc);
pthread_getunique_np(&amp;thread[i], &amp;tid);
printf("Created thread 0x%.8x %.8x\n", tid);
}
printf("Join to threads\n");
for (i=0; i&lt;NUMTHREADS; ++i) {
rc = pthread_join(thread[i], NULL);
checkResults("pthread_join()\n", rc);
}
printf("Main completed\n");
return 0;
}
</pre>
<p><strong>Output:</strong></p>
<pre>
Enter Testcase - QP0WTEST/TPGETU0
Main Thread 0x00000000 0000006c
Create 3 threads using joinable attributes
Created thread 0x00000000 0000006d
Thread 0x00000000 0000006d started
Created thread 0x00000000 0000006e
Created thread 0x00000000 0000006f
Join to threads
Thread 0x00000000 0000006f started
Thread 0x00000000 0000006e started
Main completed
</pre>
<br>
<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>