Difference between revisions of "Atomic Operation"

From CDOT Wiki
Jump to: navigation, search
(Created page with 'Category:Computer Architecture An ''atomic operation'' is one that cannot be interrupted. These operations are typically used for acquiring locks. Consider the following cod…')
 
Line 5: Line 5:
  
 
  if (lock == 0) {
 
  if (lock == 0) {
   lock++
+
   lock++;
 
   /* Perform exclusive action */
 
   /* Perform exclusive action */
   lock--
+
   lock--;
 
  } else {
 
  } else {
   abort()
+
   abort();
 
  }
 
  }
  

Revision as of 10:18, 20 January 2014

An atomic operation is one that cannot be interrupted. These operations are typically used for acquiring locks.

Consider the following code, intended to set a "lock" in shared memory so that only one thread or process performs a particular action at a time:

if (lock == 0) {
  lock++;
  /* Perform exclusive action */
  lock--;
} else {
  abort();
}

If another process or thread writes to the lock variable between the lock comparison (lock == 0) and setting the lock (lock++), then the lock could fail to ensure exclusive action.

There are two ways to accomplish an atomic operation:

  1. Use a single machine instruction.
  2. Tell the operating system in advance not to interrupt the operation.

GCC provides intrinsics for some atomic operations.