Skip to content

Commit

Permalink
Introduce Spinlock class
Browse files Browse the repository at this point in the history
Initialization is more complex than what I'd like due
to MSVC compatibility that for some reason does not like:

std::atomic_flag lock = ATOMIC_FLAG_INIT;

No functional change.
  • Loading branch information
mcostalba committed Feb 23, 2015
1 parent 098f645 commit 775f823
Showing 1 changed file with 14 additions and 0 deletions.
14 changes: 14 additions & 0 deletions src/thread.h
Expand Up @@ -20,6 +20,7 @@
#ifndef THREAD_H_INCLUDED
#define THREAD_H_INCLUDED

#include <atomic>
#include <bitset>
#include <condition_variable>
#include <mutex>
Expand Down Expand Up @@ -69,6 +70,19 @@ struct SplitPoint {
};


/// Spinlock class wraps low level atomic operations to provide spin lock functionality

class Spinlock {

std::atomic_flag lock;

public:
Spinlock() { std::atomic_flag_clear(&lock); }
void acquire() { while (lock.test_and_set(std::memory_order_acquire)) {} }
void release() { lock.clear(std::memory_order_release); }
};


/// ThreadBase struct is the base of the hierarchy from where we derive all the
/// specialized thread classes.

Expand Down

0 comments on commit 775f823

Please sign in to comment.