Skip to content

Commit b622697

Browse files
authored
Update building-h2o.cpp
1 parent 58c3d51 commit b622697

File tree

1 file changed

+41
-2
lines changed

1 file changed

+41
-2
lines changed

C++/building-h2o.cpp

Lines changed: 41 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,45 @@ class H2O {
66
H2O() {
77
}
88

9+
void hydrogen(function<void()> releaseHydrogen) {
10+
unique_lock<mutex> l(m_);
11+
releaseHydrogen_ = releaseHydrogen;
12+
++nH_;
13+
output();
14+
}
15+
16+
void oxygen(function<void()> releaseOxygen) {
17+
unique_lock<mutex> l(m_);
18+
releaseOxygen_ = releaseOxygen;
19+
++nO_;
20+
output();
21+
}
22+
23+
private:
24+
void output() {
25+
while (nH_ >= 2 && nO_ >= 1) {
26+
nH_ -= 2;
27+
nO_ -= 1;
28+
releaseHydrogen_();
29+
releaseHydrogen_();
30+
releaseOxygen_();
31+
}
32+
}
33+
34+
int nH_ = 0;
35+
int nO_ = 0;
36+
function<void()> releaseHydrogen_ = nullptr;
37+
function<void()> releaseOxygen_ = nullptr;
38+
mutex m_;
39+
};
40+
41+
// Time: O(n)
42+
// Space: O(1)
43+
class H2O2 {
44+
public:
45+
H2O2() {
46+
}
47+
948
void hydrogen(function<void()> releaseHydrogen) {
1049
{
1150
unique_lock<mutex> l(m_);
@@ -38,9 +77,9 @@ class H2O {
3877
// Time: O(n)
3978
// Space: O(1)
4079
// this is much like single thread execution
41-
class H2O2 {
80+
class H2O3 {
4281
public:
43-
H2O2(): curr_(2) {
82+
H2O3(): curr_(2) {
4483
m2_.lock();
4584
}
4685

0 commit comments

Comments
 (0)