ibm-information-center/dist/eclipse/plugins/i5OS.ic.rzahw_5.4.0.1/rzahwrzahwcascasco.htm

73 lines
4.0 KiB
HTML
Raw Normal View History

2024-04-02 14:02:31 +00:00
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html
PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html lang="en-us" xml:lang="en-us">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta name="security" content="public" />
<meta name="Robots" content="index,follow" />
<meta http-equiv="PICS-Label" content='(PICS-1.1 "http://www.icra.org/ratingsv02.html" l gen true r (cz 1 lz 1 nz 1 oz 1 vz 1) "http://www.rsac.org/ratingsv01.html" l gen true r (n 0 s 0 v 0 l 0) "http://www.classify.org/safesurf/" l gen true r (SS~~000 1))' />
<meta name="DC.Type" content="reference" />
<meta name="DC.Title" content="Compare and Swap" />
<meta name="abstract" content="You can use the Machine Interface's (MI) Compare and Swap (CMPSWP) instruction to access data in a multithreaded program." />
<meta name="description" content="You can use the Machine Interface's (MI) Compare and Swap (CMPSWP) instruction to access data in a multithreaded program." />
<meta name="DC.Relation" scheme="URI" content="rzahwsynco.htm" />
<meta name="copyright" content="(C) Copyright IBM Corporation 1998, 2006" />
<meta name="DC.Rights.Owner" content="(C) Copyright IBM Corporation 1998, 2006" />
<meta name="DC.Format" content="XHTML" />
<meta name="DC.Identifier" content="rzahwcas-casco" />
<meta name="DC.Language" content="en-us" />
<!-- 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. -->
<link rel="stylesheet" type="text/css" href="./ibmdita.css" />
<link rel="stylesheet" type="text/css" href="./ic.css" />
<title>Compare and Swap</title>
</head>
<body id="rzahwcas-casco"><a name="rzahwcas-casco"><!-- --></a>
<!-- Java sync-link --><script language="Javascript" src="../rzahg/synch.js" type="text/javascript"></script>
<h1 class="topictitle1">Compare and Swap</h1>
<div><p>You can use the Machine Interface's (MI) Compare and Swap (CMPSWP)
instruction to access data in a multithreaded program.</p>
<div class="section"><p>CMPSWP compares the value of a first compare operand to the value
of a second compare operand. If they are equal, the swap operand is stored
in the second compare operand's location. If they are unequal, the second
compare operand is stored into the first compare operand's location. </p>
</div>
<div class="section"><p>When an equal comparison occurs, it is assured that no access
by another CMPSWP instruction will occur at the second compare operand location
between the moment that the second compare operand is fetched for comparison
and the moment that the swap operand is stored at the second compare operand
location.</p>
</div>
<div class="section"><p>When an unequal comparison occurs, no atomicity guarantees are
made regarding the store to the first compare operand location and other CMPSWP
instruction access. Thus only the second compare operand should be a variable
shared for concurrent processing control.</p>
</div>
<div class="section"><p>The following code example for a C macro can be used to atomically
increment or decrement an integer variable.</p>
<pre>#ifndef __cmpswp_h
#include &lt;mih/cmpswp.h&gt;
#endif
#define ATOMICADD ( var, val, rc ) { \
int aatemp1 = (var); \
int aatemp2 = aatemp1 + val; \
while( ! _CMPSWP( &amp;aatemp1, &amp;var, aatemp2 ) ) \
aatemp2 = aatemp1 + val; \
rc = aatemp2; \
}</pre>
<p>In the code example, <em>var</em> is an integer
to be incremented or decremented, <em>val</em> is an integer value to be added
or subtracted from <em>var</em>, and <em>rc</em> is the resultant value.</p>
</div>
</div>
<div>
<div class="familylinks">
<div class="parentlink"><strong>Parent topic:</strong> <a href="rzahwsynco.htm" title="When you create code that is threadsafe but still benefits from sharing data or resources between threads, the most important aspect of programming becomes the ability to synchronize threads.">Synchronization techniques among threads</a></div>
</div>
</div>
</body>
</html>