A platform for high-performance distributed tool and library development written in C++. It can be deployed in two different cluster modes: standalone or distributed. API for v0.5.0, released on June 13, 2018.
Main Page
Namespaces
Classes
Files
File List
File Members
All
Classes
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Friends
Macros
PDBWorker.cc
Go to the documentation of this file.
1
/*****************************************************************************
2
* *
3
* Copyright 2018 Rice University *
4
* *
5
* Licensed under the Apache License, Version 2.0 (the "License"); *
6
* you may not use this file except in compliance with the License. *
7
* You may obtain a copy of the License at *
8
* *
9
* http://www.apache.org/licenses/LICENSE-2.0 *
10
* *
11
* Unless required by applicable law or agreed to in writing, software *
12
* distributed under the License is distributed on an "AS IS" BASIS, *
13
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. *
14
* See the License for the specific language governing permissions and *
15
* limitations under the License. *
16
* *
17
*****************************************************************************/
18
19
#ifndef PDB_WORKER_C
20
#define PDB_WORKER_C
21
22
#include "
Allocator.h
"
23
#include "
LockGuard.h
"
24
#include "
PDBWorker.h
"
25
#include <iostream>
26
27
namespace
pdb {
28
29
PDBWorker::PDBWorker
(
PDBWorkerQueue
* parentIn) : parent(parentIn) {
30
pthread_mutex_init(&
workerMutex
,
nullptr
);
31
pthread_cond_init(&
workToDoSignal
,
nullptr
);
32
okToExecute
=
false
;
33
}
34
35
PDBWorkerPtr
PDBWorker::getWorker
() {
36
return
parent
->
getWorker
();
37
}
38
39
PDBLoggerPtr
PDBWorker::getLogger
() {
40
return
parent
->
getLogger
();
41
}
42
43
void
PDBWorker::execute
(
PDBWorkPtr
runMeIn,
PDBBuzzerPtr
buzzWhenDoneIn) {
44
const
LockGuard
guard{
workerMutex
};
45
runMe
= runMeIn;
46
buzzWhenDone
= buzzWhenDoneIn;
47
okToExecute
=
true
;
48
pthread_cond_signal(&
workToDoSignal
);
49
}
50
51
void
PDBWorker::soundBuzzer
(
PDBAlarm
withMe) {
52
if
(
buzzWhenDone
!=
nullptr
) {
53
buzzWhenDone
->buzz(withMe);
54
}
55
}
56
57
void
PDBWorker::enter
() {
58
59
// wait for someone to tell us it is OK to do work
60
{
61
const
LockGuard
guard{
workerMutex
};
62
while
(
okToExecute
==
false
) {
63
pthread_cond_wait(&
workToDoSignal
, &
workerMutex
);
64
}
65
}
66
getAllocator
().
cleanInactiveBlocks
((
size_t
)(67108844));
67
getAllocator
().
cleanInactiveBlocks
((
size_t
)(12582912));
68
// then do the work
69
runMe
->execute(
parent
,
buzzWhenDone
);
70
okToExecute
=
false
;
71
}
72
73
void
PDBWorker::reset
() {
74
runMe
=
nullptr
;
75
buzzWhenDone
=
nullptr
;
76
}
77
78
PDBWorker::~PDBWorker
() {
79
pthread_mutex_destroy(&
workerMutex
);
80
pthread_cond_destroy(&
workToDoSignal
);
81
}
82
}
83
84
#endif
pdb::PDBWorker::workerMutex
pthread_mutex_t workerMutex
Definition:
PDBWorker.h:85
LockGuard
Definition:
LockGuard.h:37
pdb::PDBWorkerQueue::getWorker
PDBWorkerPtr getWorker()
Definition:
PDBWorkerQueue.cc:124
pdb::PDBWorker::okToExecute
bool okToExecute
Definition:
PDBWorker.h:89
Allocator.h
pdb::PDBWorker::enter
void enter()
Definition:
PDBWorker.cc:57
pdb::getAllocator
Allocator & getAllocator()
Definition:
Allocator.cc:943
pdb::PDBWorkPtr
shared_ptr< PDBWork > PDBWorkPtr
Definition:
PDBWork.h:47
pdb::PDBWorker::parent
PDBWorkerQueue * parent
Definition:
PDBWorker.h:76
pdb::PDBWorker::execute
void execute(PDBWorkPtr runMe, PDBBuzzerPtr myBuzzer)
Definition:
PDBWorker.cc:43
pdb::PDBWorker::runMe
PDBWorkPtr runMe
Definition:
PDBWorker.h:79
pdb::PDBWorker::reset
void reset()
Definition:
PDBWorker.cc:73
pdb::PDBWorker::buzzWhenDone
PDBBuzzerPtr buzzWhenDone
Definition:
PDBWorker.h:82
PDBBuzzerPtr
shared_ptr< PDBBuzzer > PDBBuzzerPtr
Definition:
PDBBuzzer.h:32
pdb::MultiPolicyAllocator::cleanInactiveBlocks
void cleanInactiveBlocks()
Definition:
Allocator.cc:917
pdb::PDBWorker::getWorker
PDBWorkerPtr getWorker()
Definition:
PDBWorker.cc:35
pdb::PDBWorkerPtr
shared_ptr< PDBWorker > PDBWorkerPtr
Definition:
PDBWorker.h:40
pdb::PDBWorker::workToDoSignal
pthread_cond_t workToDoSignal
Definition:
PDBWorker.h:86
PDBAlarm
PDBAlarm
Definition:
PDBAlarm.h:28
pdb::PDBWorkerQueue
Definition:
PDBWorkerQueue.h:48
pdb::PDBLoggerPtr
std::shared_ptr< PDBLogger > PDBLoggerPtr
Definition:
PDBLogger.h:40
pdb::PDBWorker::PDBWorker
PDBWorker(PDBWorkerQueue *parent)
Definition:
PDBWorker.cc:29
LockGuard.h
pdb::PDBWorker::soundBuzzer
void soundBuzzer(PDBAlarm withMe)
Definition:
PDBWorker.cc:51
pdb::PDBWorker::getLogger
PDBLoggerPtr getLogger()
Definition:
PDBWorker.cc:39
pdb::PDBWorker::~PDBWorker
~PDBWorker()
Definition:
PDBWorker.cc:78
PDBWorker.h
pdb::PDBWorkerQueue::getLogger
PDBLoggerPtr getLogger()
Definition:
PDBWorkerQueue.cc:79
plinycompute
pdb
src
work
source
PDBWorker.cc
Generated on Mon Jun 18 2018 18:10:37 by
1.8.6