os-70-350

os-70-350 Commit Details


Date:2014-02-08 19:01:00 (11 years 6 months ago)
Author:Natalie Adams
Branch:master
Commit:c514b84a5a6a6254f225996abd003f7635d72317
Parents: ce324dbe48b25b7e9ae194d41b6ced2729f72d24
Message:updating monitor

Changes:

File differences

ptypes-monitor/monitor.cpp
22
33
44
5
56
67
78
8
9
910
1011
12
1113
1214
1315
......
1517
1618
1719
18
20
1921
2022
2123
2224
2325
2426
25
27
2628
29
30
31
32
33
2734
2835
2936
......
3542
3643
3744
38
45
3946
47
4048
4149
4250
......
6270
6371
6472
65
73
6674
6775
6876
......
7482
7583
7684
77
85
7886
7987
8088
......
8795
8896
8997
90
9198
99
92100
93101
94102
......
97105
98106
99107
108
100109
#include <ptypes/pasync.h>
#include <ptypes/pstreams.h>
#include <vector>
#include <windows.h>
USING_PTYPES
#define MAX 10
#define MAX 100
std::vector<string> output_s;
std::vector<string> output_p;
// Inspired on http://pages.cs.wisc.edu/~remzi/OSTEP/threads-monitors.pdf
class BoundedBuffer
private:
int buffer[MAX];
int fill, use;
int fullEntries;
unsigned int fullEntries;
trigger * empty;
trigger * full;
mutex m_lock;
public:
BoundedBuffer() : fullEntries(0), fill(0), use(0) { empty = new trigger(true, false); full = new trigger(true, false); }
BoundedBuffer() : fullEntries(0), fill(0), use(0) { fillbb(); empty = new trigger(true, false); full = new trigger(true, false); }
~BoundedBuffer() { delete empty; delete full; }
void fillbb()
{
for(int i = 0; i < MAX; i++)
buffer[i] = -2;
}
void produce(int element) {
if (fullEntries == MAX)
empty->wait();
}
int consume() {
if (fullEntries == 0)
while (fullEntries == 0 || buffer[use] == -2)
full->wait();
int tmp = buffer[use];
buffer[use] = -1;
output("Consume " + itostring(tmp));
{
protected:
virtual void execute() {
for(int i = 0; i < MAX; i++)
for(int i = 0; i < MAX + 30; i++)
bb.produce(i);
}
virtual void cleanup() { }
{
protected:
virtual void execute() {
for(int i = 0; i < MAX; i++)
for(int i = 0; i < MAX + 30; i++)
bb.consume();
}
virtual void cleanup() { }
threadtest1 t1;
threadtest2 t2;
t1.start();
t2.start();
t1.start();
t1.waitfor();
t2.waitfor();
pout.put(output_s[i]);
pout.put("\n");
}
}

Archive Download the corresponding diff file

Branches

Number of commits:
Page rendered in 0.66110s using 14 queries.