1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35
|
#include "stdafx.h"
#include "Sema.h"
namespace storm {
Sema::Sema() : alloc(new Data(1)) {}
Sema::Sema(Nat count) : alloc(new Data(count)) {}
Sema::Sema(const Sema &o) : alloc(o.alloc) {
atomicIncrement(alloc->refs);
}
Sema::~Sema() {
if (atomicDecrement(alloc->refs) == 0) {
// Last one remaining.
delete alloc;
}
}
void Sema::deepCopy(CloneEnv *) {
// Nothing to do.
}
void Sema::up() {
alloc->sema.up();
}
void Sema::down() {
alloc->sema.down();
}
Sema::Data::Data(Nat count) : refs(1), sema(count) {}
}
|