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

247 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_cond_broadcast()--Broadcast Condition to All Waiting
Threads</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_cond_broadcast()--Broadcast Condition to All Waiting Threads</h2>
<div class="box" style="width: 60%;">
<br>
&nbsp;&nbsp;Syntax:
<pre>
#include &lt;pthread.h&gt;
int pthread_cond_broadcast(pthread_cond_t *cond);
</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: No<br>
<!-- iddvc RMBR -->
<br>
</div>
<p>The <strong>pthread_cond_broadcast</strong>() function wakes up all threads
that are currently waiting on the condition variable specified by
<em>cond</em>. If no threads are currently blocked on the condition variable,
this call has no effect.</p>
<p>When the threads that were the target of the broadcast wake up, they contend
for the mutex that they have associated with the condition variable on the call
to <strong>pthread_cond_timedwait</strong>() or
<strong>pthread_cond_wait</strong>().</p>
<p>The signal and broadcast functions can be called by a thread whether or not
it currently owns the mutex associated with the condition variable. If
predictable scheduling behavior is required from the applications viewpoint
however, the mutex should be locked by the thread calling
<strong>pthread_cond_signal</strong>() or
<strong>pthread_cond_broadcast</strong>().</p>
<p><strong>Note:</strong> For dependable use of condition variables, and to
ensure that you do not lose wake up operations on condition variables, your
application should always use a boolean predicate and a mutex with the
condition variable.</p>
<br>
<h3>Authorities and Locks</h3>
<p>None.</p>
<br>
<h3>Parameters</h3>
<dl>
<dt><strong>cond</strong></dt>
<dd>(Input) Pointer to the condition variable that is to be broadcast to</dd>
</dl>
<br>
<h3>Return Value</h3>
<dl>
<dt><strong>0</strong></dt>
<dd><strong>pthread_cond_broadcast</strong>() was successful.&nbsp;<a name=
"295689"></a></dd>
<dt><strong>value</strong></dt>
<dd><strong>pthread_cond_broadcast</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_cond_broadcast</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_75.htm">pthread_cond_init()</a>--Initialize Condition
Variable<br><br></li>
<li><a href="users_76.htm">pthread_cond_signal()</a>--Signal Condition to One
Waiting Thread<br><br></li>
<li><a href="users_77.htm">pthread_cond_timedwait()</a>--Timed Wait for
Condition<br><br></li>
<li><a href="users_78.htm">pthread_cond_wait()</a>--Wait for Condition</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"
/* For safe condition variable usage, must use a boolean predicate and */
/* a mutex with the condition. */
int conditionMet = 0;
pthread_cond_t cond = PTHREAD_COND_INITIALIZER;
pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;
#define NTHREADS 5
void *threadfunc(void *parm)
{
int rc;
rc = pthread_mutex_lock(&amp;mutex);
checkResults("pthread_mutex_lock()\n", rc);
while (!conditionMet) {
printf("Thread blocked\n");
rc = pthread_cond_wait(&amp;cond, &amp;mutex);
checkResults("pthread_cond_wait()\n", rc);
}
rc = pthread_mutex_unlock(&amp;mutex);
checkResults("pthread_mutex_lock()\n", rc);
return NULL;
}
int main(int argc, char **argv)
{
int rc=0;
int i;
pthread_t threadid[NTHREADS];
printf("Enter Testcase - %s\n", argv[0]);
printf("Create %d threads\n", NTHREADS);
for(i=0; i&lt;NTHREADS; ++i) {
rc = pthread_create(&amp;threadid[i], NULL, threadfunc, NULL);
checkResults("pthread_create()\n", rc);
}
sleep(5); /* Sleep is not a very robust way to serialize threads */
rc = pthread_mutex_lock(&amp;mutex);
checkResults("pthread_mutex_lock()\n", rc);
/* The condition has occured. Set the flag and wake up any waiting threads */
conditionMet = 1;
printf("Wake up all waiting threads...\n");
rc = pthread_cond_broadcast(&amp;cond);
checkResults("pthread_cond_broadcast()\n", rc);
rc = pthread_mutex_unlock(&amp;mutex);
checkResults("pthread_mutex_unlock()\n", rc);
printf("Wait for threads and cleanup\n");
for (i=0; i&lt;NTHREADS; ++i) {
rc = pthread_join(threadid[i], NULL);
checkResults("pthread_join()\n", rc);
}
pthread_cond_destroy(&amp;cond);
pthread_mutex_destroy(&amp;mutex);
printf("Main completed\n");
return 0;
}
</pre>
<p><strong>Output:</strong></p>
<pre>
Entering testcase
Create 5 threads
Thread blocked
Thread blocked
Thread blocked
Thread blocked
Thread blocked
Wake up all waiting threads...
Wait for threads and cleanup
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>