You are viewing a plain text version of this content. The canonical link for it is here.
Posted to log4cxx-dev@logging.apache.org by mc...@apache.org on 2004/04/02 11:06:04 UTC

cvs commit: logging-log4cxx/src thread.cpp

mcatan      2004/04/02 01:06:04

  Modified:    src      thread.cpp
  Log:
  added InterlockedIncrement and InterlockedDecrement
  
  Revision  Changes    Path
  1.8       +46 -0     logging-log4cxx/src/thread.cpp
  
  Index: thread.cpp
  ===================================================================
  RCS file: /home/cvs/logging-log4cxx/src/thread.cpp,v
  retrieving revision 1.7
  retrieving revision 1.8
  diff -u -r1.7 -r1.8
  --- thread.cpp	7 Mar 2004 06:14:00 -0000	1.7
  +++ thread.cpp	2 Apr 2004 09:06:04 -0000	1.8
  @@ -159,3 +159,49 @@
   		break;
   	}
   }
  +
  +#ifdef __GLIBCPP__
  +#include <bits/atomicity.h>
  +#endif
  +
  +long Thread::InterlockedIncrement(volatile long * val)
  +{
  +#ifdef __GLIBCPP__
  +	return __exchange_and_add((volatile _Atomic_word *)val, 1 ) + 1;
  +#elif defined(__i386__)
  +	long ret;
  +	
  +	__asm__ __volatile__ ("lock; xaddl %0, %1"
  +			      : "=r" (ret), "=m" (*val)
  +			      : "0" (1), "m" (*val));
  +
  +	return ret+1;
  +#elif defined(HAVE_MS_THREAD)
  +#if _MSC_VER == 1200	// MSDEV 6
  +	return ::InterlockedIncrement((long *)val);
  +#else
  +	return ::InterlockedIncrement(val);
  +#endif // _MSC_VER
  +#endif
  +}
  +
  +long Thread::InterlockedDecrement(volatile long * val)
  +{
  +#ifdef __GLIBCPP__
  +	return __exchange_and_add((volatile _Atomic_word *)val, -1 ) - 1;
  +#elif defined(__i386__)
  +	long ret;
  +	
  +	__asm__ __volatile__ ("lock; xaddl %0, %1"
  +			      : "=r" (ret), "=m" (*val)
  +			      : "0" (-1), "m" (*val));
  +
  +	return ret-1;
  +#elif defined(HAVE_MS_THREAD)
  +#if _MSC_VER == 1200	// MSDEV 6
  +	return ::InterlockedDecrement((long *)val);
  +#else
  +	return ::InterlockedDecrement(val);
  +#endif // _MSC_VER
  +#endif
  +}