diff options
| author | Florian Fischer <florian.fl.fischer@fau.de> | 2018-07-24 11:17:48 +0200 |
|---|---|---|
| committer | Florian Fischer <florian.fl.fischer@fau.de> | 2018-07-24 11:17:48 +0200 |
| commit | 8f6e9a172923b67ccffaf9fd519642ae242db868 (patch) | |
| tree | b38624306297c73011756dbd2bcbbcf9ea6c1f37 /benchmarks/fred.h | |
| parent | fce50c833496d8c07a1d189807d81be15875431c (diff) | |
| download | allocbench-8f6e9a172923b67ccffaf9fd519642ae242db868.tar.gz allocbench-8f6e9a172923b67ccffaf9fd519642ae242db868.zip | |
add falsesharing benchmarks from berger
Diffstat (limited to 'benchmarks/fred.h')
| -rw-r--r-- | benchmarks/fred.h | 97 |
1 files changed, 97 insertions, 0 deletions
diff --git a/benchmarks/fred.h b/benchmarks/fred.h new file mode 100644 index 0000000..b0198a7 --- /dev/null +++ b/benchmarks/fred.h @@ -0,0 +1,97 @@ +// -*- C++ -*- + +#ifndef HL_FRED_H +#define HL_FRED_H + +/// A thread-wrapper of childlike simplicity :). + +#if defined(_WIN32) + + #include <windows.h> + #include <process.h> + +#elif defined(__SVR4) + + #include <thread.h> + #include <pthread.h> + #include <unistd.h> + +#else + + #include <pthread.h> + #include <unistd.h> + +#endif + +typedef void * (*ThreadFunctionType) (void *); + +namespace HL { + +class Fred { +public: + + Fred() { +#if !defined(_WIN32) + pthread_attr_init (&attr); + pthread_attr_setscope (&attr, PTHREAD_SCOPE_SYSTEM); +#endif + } + + ~Fred() { +#if !defined(_WIN32) + pthread_attr_destroy (&attr); +#endif + } + + void create (ThreadFunctionType function, void * arg) { +#if defined(_WIN32) + t = CreateThread (0, 0, (LPTHREAD_START_ROUTINE) *function, (LPVOID) arg, 0, 0); +#else + pthread_create (&t, &attr, function, arg); +#endif + } + + void join (void) { +#if defined(_WIN32) + WaitForSingleObject (t, INFINITE); +#else + pthread_join (t, NULL); +#endif + } + + static void yield (void) { +#if defined(_WIN32) + Sleep (0); +#elif defined(__SVR4) + thr_yield(); +#else + sched_yield(); +#endif + } + + + static void setConcurrency (int n) { +#if defined(_WIN32) +#elif defined(__SVR4) + thr_setconcurrency (n); +#else + pthread_setconcurrency (n); +#endif + } + + +private: +#if defined(_WIN32) + typedef HANDLE FredType; +#else + typedef pthread_t FredType; + pthread_attr_t attr; +#endif + + FredType t; +}; + +} + + +#endif |
