コード例 #1
0
ファイル: pthread_tools.hpp プロジェクト: bmabey/graphchi
 inline void readlock() const {
     unsigned me = atomic_xadd(&l.u, (1<<16));
     unsigned char val = me >> 16;
     
     while (val != l.s.read) sched_yield();
     l.s.read++;
 }
コード例 #2
0
 inline void writelock() const {
   unsigned me = atomic_xadd(&l.u, (1<<16));
   unsigned char val = (unsigned char)(me >> 16);
 
   while (val != l.s.write) sched_yield();
   writing = true;
 }
コード例 #3
0
 inline void readlock() const {
   unsigned me = atomic_xadd(&l.u, (1<<16));
   unsigned char val = (unsigned char)(me >> 16);
 
   while (val != l.s.read) asm volatile("pause\n": : :"memory");
   l.s.read++;
 }
コード例 #4
0
ファイル: auto_dir.cpp プロジェクト: ahiguti/ase
void
auto_dir::reset(::DIR *p)
{
  reset();
  if (p) {
    #ifndef NDEBUG
    atomic_xadd(dir_constr_count, 1);
    #endif
    ptr = p;
  }
}
コード例 #5
0
ファイル: auto_dir.cpp プロジェクト: ahiguti/ase
void
auto_dir::reset()
{
  if (ptr) {
    #ifndef NDEBUG
    atomic_xadd(dir_destr_count, 1);
    #endif
    ::closedir(ptr);
    ptr = 0;
  }
}
コード例 #6
0
ファイル: rwlock.c プロジェクト: asamy/csnippets
void rwlock_wrlock(rwlock_t *l)
{
#ifndef _WIN32
	unsigned me = atomic_xadd(&l->u, (1<<16));
	unsigned char val = me >> 16;

	while (val != l->s.write)
		cpu_relax();
#else
	AcquireSRWLockExclusive(l);
#endif
}
コード例 #7
0
ファイル: rwlock.c プロジェクト: asamy/csnippets
void rwlock_rdlock(rwlock_t *l)
{
#ifndef _WIN32
	unsigned me = atomic_xadd(&l->u, (1<<16));
	unsigned char val = me >> 16;

	while (val != l->s.read)
		cpu_relax();
	l->s.read++;
#else
	AcquireSRWLockShared(l);
#endif
}
コード例 #8
0
ファイル: scheduler.cpp プロジェクト: onukore/radium
static INLINE int DEC_ATOMIC(volatile int* val)
{
    return atomic_xadd(val, -1);
}