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

208 lines
5.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_getthreadid_np()--Retrieve Unique ID for Calling 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_getthreadid_np()--Retrieve Unique ID for Calling Thread</h2>
<div class="box" style="width: 50%;">
<br>
&nbsp;&nbsp;Syntax:
<pre>
#include &lt;pthread.h&gt;
pthread_id_np_t pthread_getthreadid_np(void);
</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_getthreadid_np</strong>() function retrieves the unique
integral identifier that can be used to identify the calling 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>
<p>None.</p>
<br>
<h3>Return Value</h3>
<p>The pthread_id_np_t structure identifying the thread</p>
<br>
<h3>Error Conditions</h3>
<p>None.</p>
<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_23.htm">pthread_getunique_np()</a>--Retrieve Unique ID for
Target Thread</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)
{
printf("Thread 0x%.8x %.8x started\n", pthread_getthreadid_np());
return NULL;
}
int main(int argc, char **argv)
{
pthread_t thread[NUMTHREADS];
int rc=0;
pthread_id_np_t tid;
int i=0;
printf("Enter Testcase - %s\n", argv[0]);
printf("Main Thread 0x%.8x %.8x\n", pthread_getthreadid_np());
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/TPGETT0
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>