Click
Loading...
Searching...
No Matches
Classes | Macros
sync.hh File Reference

Classes for synchronizing among multiple CPUs, particularly in the Linux kernel. More...

#include <click/machine.hh>
#include <click/glue.hh>
#include <click/atomic.hh>

Go to the source code of this file.

Classes

class  per_thread< T >
 
class  not_per_thread< T >
 
class  Spinlock
 A recursive spinlock for SMP Click threads. More...
 
class  SimpleSpinlock
 A non-recursive spinlock for SMP Click threads. More...
 
class  SpinlockIRQ
 A spinlock that disables interrupts. More...
 
class  ReadWriteLock
 A read/write lock. More...
 
class  nolock
 

Macros

#define CLICK_MULTITHREAD_SPINLOCK   1
 
#define SPINLOCK_ASSERTLEVEL   "<-999>"
 
#define PER_THREAD_SET(pt, value)
 
#define PER_THREAD_POINTER_SET(pt, member, value)
 
#define PER_THREAD_MEMBER_SET(pt, member, value)
 
#define PER_THREAD_VECTOR_SET(pt, member, value)
 
#define PER_THREAD_SUM(type, var, pt)
 
#define PER_THREAD_POINTER_SUM(type, var, pt, member)
 
#define PER_THREAD_MEMBER_SUM(type, var, pt, member)
 
#define PER_THREAD_VECTOR_SUM(type, var, pt, index, member)
 

Detailed Description

Classes for synchronizing among multiple CPUs, particularly in the Linux kernel.

>

Macro Definition Documentation

◆ PER_THREAD_SET

#define PER_THREAD_SET (   pt,
  value 
)
Value:
for (unsigned i = 0; i < pt.weight(); i++) { \
pt.set_value(i, value); \
}

◆ PER_THREAD_POINTER_SET

#define PER_THREAD_POINTER_SET (   pt,
  member,
  value 
)
Value:
for (unsigned i = 0; i < pt.weight(); i++) { \
pt.get_value(i)->member = value; \
}

◆ PER_THREAD_MEMBER_SET

#define PER_THREAD_MEMBER_SET (   pt,
  member,
  value 
)
Value:
for (unsigned i = 0; i < pt.weight(); i++) { \
pt.get_value(i).member = value; \
}

◆ PER_THREAD_VECTOR_SET

#define PER_THREAD_VECTOR_SET (   pt,
  member,
  value 
)
Value:
for (unsigned i = 0; i < pt.weight(); i++) { \
for (int j = 0; j < pt.get_value(i).size(); j++) \
(pt.get_value(i))[j].member = value; \
}

◆ PER_THREAD_SUM

#define PER_THREAD_SUM (   type,
  var,
  pt 
)
Value:
type var = 0; \
for (unsigned i = 0; i < pt.weight(); i++) { \
var += pt.get_value(i); \
}

◆ PER_THREAD_POINTER_SUM

#define PER_THREAD_POINTER_SUM (   type,
  var,
  pt,
  member 
)
Value:
type var = 0; \
for (unsigned i = 0; i < pt.weight(); i++) { \
var += pt.get_value(i)->member; \
}

◆ PER_THREAD_MEMBER_SUM

#define PER_THREAD_MEMBER_SUM (   type,
  var,
  pt,
  member 
)
Value:
type var = 0; \
for (unsigned i = 0; i < pt.weight(); i++) { \
var += pt.get_value(i).member; \
}

◆ PER_THREAD_VECTOR_SUM

#define PER_THREAD_VECTOR_SUM (   type,
  var,
  pt,
  index,
  member 
)
Value:
type var = 0; \
for (unsigned i = 0; i < pt.weight(); i++) { \
var += pt.get_value(i)[index].member; \
}