-
Notifications
You must be signed in to change notification settings - Fork 13
/
Copy pathsemaphore_test.cpp
47 lines (42 loc) · 1.32 KB
/
semaphore_test.cpp
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
#include <co_async/co_async.hpp>
#include <co_async/std.hpp>
using namespace co_async;
using namespace std::literals;
Semaphore sem(2, 0);
static Task<Expected<>> func() {
(void)co_await co_sleep(1000ms);
debug(), sem.count();
co_await co_await sem.release();
debug(), sem.count();
(void)co_await co_sleep(1000ms);
debug(), sem.count();
co_await co_await sem.release();
debug(), sem.count();
co_await co_await sem.release();
debug(), sem.count();
co_await co_await sem.release();
debug(), sem.count();
co_return {};
}
static Task<Expected<>> amain() {
co_spawn(func());
auto success = co_await co_timeout(sem.acquire(), 800ms);
debug(), success, sem.count();
success = co_await co_timeout(sem.acquire(), 800ms);
debug(), success, sem.count();
success = co_await co_timeout(sem.acquire(), 800ms);
debug(), success, sem.count();
success = co_await co_timeout(sem.acquire(), 800ms);
debug(), success, sem.count();
success = co_await co_timeout(sem.acquire(), 800ms);
debug(), success, sem.count();
success = co_await co_timeout(sem.acquire(), 800ms);
debug(), success, sem.count();
success = co_await co_timeout(sem.acquire(), 800ms);
debug(), success, sem.count();
co_return {};
}
int main() {
co_main(amain());
return 0;
}