-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathlockableVectorTester.cpp
More file actions
88 lines (69 loc) · 2.19 KB
/
Copy pathlockableVectorTester.cpp
File metadata and controls
88 lines (69 loc) · 2.19 KB
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
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
#include <lockableVector.hpp>
#include <iostream>
#include <future>
#include <algorithm>
using namespace std;
void printVector (std::vector<int> &v, std::string ph = "") {
std::cout << ph;
for (auto i : v) {
std::cout << i << " ";
}
std::cout << std::endl;
}
int main (int argn, char **argv) {
cout << "Hello user!!\n";
LockableVector<int> locV;
auto handle0 = async (launch::async, [&locV]() {
cout << "[0] Locking\n";
auto locked = locV.lockAndGet ();
cout << "[0] Locked\n";
locked->data.push_back (10);
locked->data.push_back (20);
this_thread::sleep_for (chrono::milliseconds (2000));
cout << "[0] Unlocking\n";
locked.reset();
cout << "[0] Unlocked\n";
cout << "[0] Exiting\n";
});
auto handle1 = async (launch::async, [&locV]() {
this_thread::sleep_for (chrono::milliseconds (10));
cout << "[1] Locking\n";
auto locked = locV.lockAndGet ();
cout << "[1] Locked\n";
int zero = std::move (locked->data[0]);
int uno = std::move (locked->data[1]);
locked->data.erase (locked->data.begin());
cout << "zero: " << zero << " --" << locked->data[0] << "--\n";
cout << "uno: " << uno << " --" << locked->data[1] << "--\n";
cout << "size: " << locked->data.size () << endl;
locked->data.erase (locked->data.begin());
cout << "size: " << locked->data.size () << endl;
std::for_each (locked->data.begin(), locked->data.end(), [] (int i) {
cout << "--> " << i << endl;
});
cout << "[1] Unlocking\n";
cout << "[1] Unlocked\n";
});
handle0.wait ();
handle1.wait ();
// Testing swap method
LockableVector<int> lv;
std::vector<int> v;
lv.getVector().push_back (0);
lv.getVector().push_back (2);
lv.getVector().push_back (4);
lv.getVector().push_back (6);
lv.getVector().push_back (8);
v.push_back (1);
v.push_back (3);
v.push_back (5);
v.push_back (7);
v.push_back (9);
printVector (lv.getVector(), "Original lv: "); // OUTPUT -> Original lv: 0 2 4 6 8
printVector (v, "Original V: "); // OUTPUT -> Original v: 1 3 5 7 9
std::cout << std::endl;
lv.swap (v);
printVector (lv.getVector(), "Swapped lv: "); // OUTPUT -> Swapped lv: 1 3 5 7 9
printVector (v, "Swapped v: "); // OUTPUT -> Swapped v: 0 2 4 6 8
return 0;
}