<html lang="en">
<head>
<title>Non-atomic Example - The GNU C Library</title>
<meta http-equiv="Content-Type" content="text/html">
<meta name="description" content="The GNU C Library">
<meta name="generator" content="makeinfo 4.13">
<link title="Top" rel="start" href="index.html#Top">
<link rel="up" href="Atomic-Data-Access.html#Atomic-Data-Access" title="Atomic Data Access">
<link rel="next" href="Atomic-Types.html#Atomic-Types" title="Atomic Types">
<link href="http://www.gnu.org/software/texinfo/" rel="generator-home" title="Texinfo Homepage">
<!--
This file documents the GNU C library.

This is Edition 0.12, last updated 2007-10-27,
of `The GNU C Library Reference Manual', for version
2.8 (Sourcery G++ Lite 2011.03-41).

Copyright (C) 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2001, 2002,
2003, 2007, 2008, 2010 Free Software Foundation, Inc.

Permission is granted to copy, distribute and/or modify this document
under the terms of the GNU Free Documentation License, Version 1.3 or
any later version published by the Free Software Foundation; with the
Invariant Sections being ``Free Software Needs Free Documentation''
and ``GNU Lesser General Public License'', the Front-Cover texts being
``A GNU Manual'', and with the Back-Cover Texts as in (a) below.  A
copy of the license is included in the section entitled "GNU Free
Documentation License".

(a) The FSF's Back-Cover Text is: ``You have the freedom to
copy and modify this GNU manual.  Buying copies from the FSF
supports it in developing GNU and promoting software freedom.''-->
<meta http-equiv="Content-Style-Type" content="text/css">
<style type="text/css"><!--
  pre.display { font-family:inherit }
  pre.format  { font-family:inherit }
  pre.smalldisplay { font-family:inherit; font-size:smaller }
  pre.smallformat  { font-family:inherit; font-size:smaller }
  pre.smallexample { font-size:smaller }
  pre.smalllisp    { font-size:smaller }
  span.sc    { font-variant:small-caps }
  span.roman { font-family:serif; font-weight:normal; } 
  span.sansserif { font-family:sans-serif; font-weight:normal; } 
--></style>
<link rel="stylesheet" type="text/css" href="../cs.css">
</head>
<body>
<div class="node">
<a name="Non-atomic-Example"></a>
<a name="Non_002datomic-Example"></a>
<p>
Next:&nbsp;<a rel="next" accesskey="n" href="Atomic-Types.html#Atomic-Types">Atomic Types</a>,
Up:&nbsp;<a rel="up" accesskey="u" href="Atomic-Data-Access.html#Atomic-Data-Access">Atomic Data Access</a>
<hr>
</div>

<h5 class="subsubsection">24.4.7.1 Problems with Non-Atomic Access</h5>

<p>Here is an example which shows what can happen if a signal handler runs
in the middle of modifying a variable.  (Interrupting the reading of a
variable can also lead to paradoxical results, but here we only show
writing.)

<pre class="smallexample">     #include &lt;signal.h&gt;
     #include &lt;stdio.h&gt;
     
     volatile struct two_words { int a, b; } memory;
     
     void
     handler(int signum)
     {
        printf ("%d,%d\n", memory.a, memory.b);
        alarm (1);
     }
     
     int
     main (void)
     {
        static struct two_words zeros = { 0, 0 }, ones = { 1, 1 };
        signal (SIGALRM, handler);
        memory = zeros;
        alarm (1);
        while (1)
          {
            memory = zeros;
            memory = ones;
          }
     }
</pre>
   <p>This program fills <code>memory</code> with zeros, ones, zeros, ones,
alternating forever; meanwhile, once per second, the alarm signal handler
prints the current contents.  (Calling <code>printf</code> in the handler is
safe in this program because it is certainly not being called outside
the handler when the signal happens.)

   <p>Clearly, this program can print a pair of zeros or a pair of ones.  But
that's not all it can do!  On most machines, it takes several
instructions to store a new value in <code>memory</code>, and the value is
stored one word at a time.  If the signal is delivered in between these
instructions, the handler might find that <code>memory.a</code> is zero and
<code>memory.b</code> is one (or vice versa).

   <p>On some machines it may be possible to store a new value in
<code>memory</code> with just one instruction that cannot be interrupted.  On
these machines, the handler will always print two zeros or two ones.

   </body></html>

