1
1
//
2
2
// Created by konstantin on 19.07.24.
3
3
//
4
- #include " event.h"
5
-
6
4
#include < iostream>
7
5
#include < syncstream>
8
6
7
+ #include " async_mutex_coro_impl.h"
8
+
9
9
namespace NComponents {
10
10
11
- bool Event ::TryLock () {
11
+ bool AsyncMutexCoroImpl ::TryLock () {
12
12
if (lock_flag) {
13
13
std::osyncstream (std::cout)
14
- << " [Event ::TryLock][thread_id=" << std::this_thread::get_id ()
14
+ << " [AsyncMutexCoroImpl ::TryLock][thread_id=" << std::this_thread::get_id ()
15
15
<< " ] lock_flag was locked. Need park." << std::endl;
16
16
return false ;
17
17
}
18
18
19
19
std::osyncstream (std::cout)
20
- << " [Event ::TryLock][thread_id=" << std::this_thread::get_id ()
20
+ << " [AsyncMutexCoroImpl ::TryLock][thread_id=" << std::this_thread::get_id ()
21
21
<< " ] lock lock_flag." << std::endl;
22
22
lock_flag = true ;
23
23
return true ;
24
24
}
25
25
26
- void Event ::Unlock () {
26
+ void AsyncMutexCoroImpl ::Unlock () {
27
27
std::unique_lock lock (spinlock);
28
28
29
29
std::osyncstream (std::cout)
30
- << " [Event ::Unlock][thread_id=" << std::this_thread::get_id ()
30
+ << " [AsyncMutexCoroImpl ::Unlock][thread_id=" << std::this_thread::get_id ()
31
31
<< " ] call" << std::endl;
32
32
33
33
if (!waiters.empty ()) {
34
- std::cout << " [Event ::Unlock] Waiters size=" << waiters.size ()
34
+ std::cout << " [AsyncMutexCoroImpl ::Unlock] Waiters size=" << waiters.size ()
35
35
<< " , wake up first" << std::endl;
36
36
MutexAwaiter waiter = std::move (waiters.front ());
37
37
waiters.pop_front ();
@@ -41,26 +41,25 @@ void Event::Unlock() {
41
41
return ;
42
42
}
43
43
44
- std::cout << " [Event ::Unlock] Waiters empty. Set lock_flag to false"
44
+ std::cout << " [AsyncMutexCoroImpl ::Unlock] Waiters empty. Set lock_flag to false"
45
45
<< std::endl;
46
46
lock_flag = false ;
47
47
}
48
48
49
- MutexAwaiter Event::operator co_await () {
50
- // std::unique_lock lock(spinlock);
51
- return MutexAwaiter{*this , spinlock};
52
- }
53
-
54
- void Event::ParkAwaiter (MutexAwaiter* awaiter) {
49
+ void AsyncMutexCoroImpl::ParkAwaiter (MutexAwaiter* awaiter) {
55
50
assert (awaiter);
56
- // assert(awaiter->HasLock());
57
51
58
52
std::osyncstream (std::cout)
59
- << " [Event ::ParkAwaiter][thead_id=" << std::this_thread::get_id ()
53
+ << " [AsyncMutexCoroImpl ::ParkAwaiter][thead_id=" << std::this_thread::get_id ()
60
54
<< " ] add waiter, new size=" << waiters.size () + 1 << std::endl;
61
55
62
56
waiters.emplace_back (std::move (*awaiter));
63
57
waiters.back ().ReleaseLock ();
64
58
}
65
59
60
+ MutexAwaiter AsyncMutexCoroImpl::operator co_await () {
61
+ MutexAwaiter::LockGuard guard (spinlock);
62
+ return MutexAwaiter{*this , std::move (guard)};
63
+ }
64
+
66
65
} // namespace NComponents
0 commit comments