ROME 2 Lab5

Committer:
oehlemar
Date:
Fri Jun 12 08:19:42 2020 +0000
Revision:
1:5201940a41c1
Parent:
0:893a1e710078
asdf

Who changed what in which revision?

UserRevisionLine numberNew contents of line
oehlemar 0:893a1e710078 1 /*
oehlemar 0:893a1e710078 2 * ThreadFlag.cpp
oehlemar 0:893a1e710078 3 * Copyright (c) 2020, ZHAW
oehlemar 0:893a1e710078 4 * All rights reserved.
oehlemar 0:893a1e710078 5 */
oehlemar 0:893a1e710078 6
oehlemar 0:893a1e710078 7 #include "ThreadFlag.h"
oehlemar 0:893a1e710078 8
oehlemar 0:893a1e710078 9 using namespace std;
oehlemar 0:893a1e710078 10
oehlemar 0:893a1e710078 11 unsigned int ThreadFlag::threadFlags = 0;
oehlemar 0:893a1e710078 12
oehlemar 0:893a1e710078 13 /**
oehlemar 0:893a1e710078 14 * Creates a signal object and assignes a unique flag.
oehlemar 0:893a1e710078 15 */
oehlemar 0:893a1e710078 16 ThreadFlag::ThreadFlag() {
oehlemar 0:893a1e710078 17
oehlemar 0:893a1e710078 18 mutex.lock();
oehlemar 0:893a1e710078 19
oehlemar 0:893a1e710078 20 unsigned int n = 0;
oehlemar 0:893a1e710078 21 while ((((1 << n) & threadFlags) > 0) && (n < 30)) n++;
oehlemar 0:893a1e710078 22 threadFlag = (1 << n);
oehlemar 0:893a1e710078 23
oehlemar 0:893a1e710078 24 mutex.unlock();
oehlemar 0:893a1e710078 25 }
oehlemar 0:893a1e710078 26
oehlemar 0:893a1e710078 27 /**
oehlemar 0:893a1e710078 28 * Deletes the signal object and releases the assigned flag.
oehlemar 0:893a1e710078 29 */
oehlemar 0:893a1e710078 30 ThreadFlag::~ThreadFlag() {
oehlemar 0:893a1e710078 31
oehlemar 0:893a1e710078 32 mutex.lock();
oehlemar 0:893a1e710078 33
oehlemar 0:893a1e710078 34 threadFlags &= ~threadFlag;
oehlemar 0:893a1e710078 35
oehlemar 0:893a1e710078 36 mutex.unlock();
oehlemar 0:893a1e710078 37 }
oehlemar 0:893a1e710078 38
oehlemar 0:893a1e710078 39 /**
oehlemar 0:893a1e710078 40 * Gets the assigned thread flag.
oehlemar 0:893a1e710078 41 */
oehlemar 0:893a1e710078 42 unsigned int ThreadFlag::read() {
oehlemar 0:893a1e710078 43
oehlemar 0:893a1e710078 44 return threadFlag;
oehlemar 0:893a1e710078 45 }
oehlemar 0:893a1e710078 46
oehlemar 0:893a1e710078 47 /**
oehlemar 0:893a1e710078 48 * The empty operator is a shorthand notation of the <code>read()</code> method.
oehlemar 0:893a1e710078 49 */
oehlemar 0:893a1e710078 50 ThreadFlag::operator unsigned int() {
oehlemar 0:893a1e710078 51
oehlemar 0:893a1e710078 52 return read();
oehlemar 0:893a1e710078 53 }
oehlemar 0:893a1e710078 54