- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
libcfa/src/concurrency/mutex.cfa
r2026bb6 rae66348 11 11 // Author : Thierry Delisle 12 12 // Created On : Fri May 25 01:37:11 2018 13 // Last Modified By : Thierry Delisle14 // Last Modified On : Fri May 25 01:37:51 201815 // Update Count : 013 // Last Modified By : Peter A. Buhr 14 // Last Modified On : Wed Dec 4 09:16:39 2019 15 // Update Count : 1 16 16 // 17 17 … … 40 40 if( is_locked ) { 41 41 append( blocked_threads, kernelTLS.this_thread ); 42 BlockInternal( &lock ); 42 unlock( lock ); 43 park( __cfaabi_dbg_ctx ); 43 44 } 44 45 else { … … 62 63 lock( this.lock __cfaabi_dbg_ctx2 ); 63 64 this.is_locked = (this.blocked_threads != 0); 64 WakeThread(65 pop_head( this.blocked_threads ) 65 unpark( 66 pop_head( this.blocked_threads ) __cfaabi_dbg_ctx2 66 67 ); 67 68 unlock( this.lock ); … … 73 74 this.lock{}; 74 75 this.blocked_threads{}; 75 this.owner = NULL;76 this.owner = 0p; 76 77 this.recursion_count = 0; 77 78 } … … 83 84 void lock(recursive_mutex_lock & this) with(this) { 84 85 lock( lock __cfaabi_dbg_ctx2 ); 85 if( owner == NULL) {86 if( owner == 0p ) { 86 87 owner = kernelTLS.this_thread; 87 88 recursion_count = 1; … … 94 95 else { 95 96 append( blocked_threads, kernelTLS.this_thread ); 96 BlockInternal( &lock ); 97 unlock( lock ); 98 park( __cfaabi_dbg_ctx ); 97 99 } 98 100 } … … 101 103 bool ret = false; 102 104 lock( lock __cfaabi_dbg_ctx2 ); 103 if( owner == NULL) {105 if( owner == 0p ) { 104 106 owner = kernelTLS.this_thread; 105 107 recursion_count = 1; … … 118 120 recursion_count--; 119 121 if( recursion_count == 0 ) { 120 thread_desc* thrd = pop_head( blocked_threads );122 $thread * thrd = pop_head( blocked_threads ); 121 123 owner = thrd; 122 124 recursion_count = (thrd ? 1 : 0); 123 WakeThread( thrd);125 unpark( thrd __cfaabi_dbg_ctx2 ); 124 126 } 125 127 unlock( lock ); … … 138 140 void notify_one(condition_variable & this) with(this) { 139 141 lock( lock __cfaabi_dbg_ctx2 ); 140 WakeThread(141 pop_head( this.blocked_threads ) 142 unpark( 143 pop_head( this.blocked_threads ) __cfaabi_dbg_ctx2 142 144 ); 143 145 unlock( lock ); … … 147 149 lock( lock __cfaabi_dbg_ctx2 ); 148 150 while(this.blocked_threads) { 149 WakeThread(150 pop_head( this.blocked_threads ) 151 unpark( 152 pop_head( this.blocked_threads ) __cfaabi_dbg_ctx2 151 153 ); 152 154 } … … 157 159 lock( this.lock __cfaabi_dbg_ctx2 ); 158 160 append( this.blocked_threads, kernelTLS.this_thread ); 159 BlockInternal( &this.lock ); 161 unlock( this.lock ); 162 park( __cfaabi_dbg_ctx ); 160 163 } 161 164 … … 164 167 lock( this.lock __cfaabi_dbg_ctx2 ); 165 168 append( this.blocked_threads, kernelTLS.this_thread ); 166 void __unlock(void) { 167 unlock(l); 168 unlock(this.lock); 169 } 170 BlockInternal( __unlock ); 169 unlock(l); 170 unlock(this.lock); 171 park( __cfaabi_dbg_ctx ); 171 172 lock(l); 172 173 }
Note:
See TracChangeset
for help on using the changeset viewer.