Changeset 7b1f6d4 for libcfa/src/concurrency/locks.cfa
- Timestamp:
- Dec 21, 2020, 1:55:24 PM (3 years ago)
- Branches:
- ADT, arm-eh, ast-experimental, enum, forall-pointer-decay, jacob/cs343-translation, master, new-ast-unique-expr, pthread-emulation, qualifiedEnum
- Children:
- 3d19ae6, d411769c
- Parents:
- 5d369c7 (diff), 276a94d7 (diff)
Note: this is a merge changeset, the changes displayed below correspond to the merge itself.
Use the(diff)
links above to see all the changes relative to each parent. - File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
libcfa/src/concurrency/locks.cfa
r5d369c7 r7b1f6d4 17 17 this.t = t; 18 18 this.lock = 0p; 19 this.listed = false;20 19 } 21 20 … … 25 24 this.info = info; 26 25 this.lock = 0p; 27 this.listed = false;28 26 } 29 27 … … 36 34 info_thread(L) *& Next( info_thread(L) * this ) { 37 35 return (info_thread(L) *)Next( (Colable *)this ); 38 }39 40 bool listed( info_thread(L) * this ) {41 return Next( (Colable *)this ) != 0p;42 36 } 43 37 } … … 194 188 // This condition_variable member is called from the kernel, and therefore, cannot block, but it can spin. 195 189 lock( cond->lock __cfaabi_dbg_ctx2 ); 196 197 if ( i->listed ) { // is thread on queue190 if ( listed(i) ) { // is thread on queue 191 i->signalled = false; 198 192 cond->last_thread = i; // REMOVE THIS AFTER DEBUG 199 193 remove( cond->blocked_threads, *i ); //remove this thread O(1) … … 227 221 void process_popped( condition_variable(L) & this, info_thread(L) & popped ) with( this ) { 228 222 if(&popped != 0p) { 229 popped. listed = false;223 popped.signalled = true; 230 224 count--; 231 225 if (popped.lock) { … … 266 260 addTail( blocked_threads, *i ); 267 261 count++; 268 i->listed = true;269 262 size_t recursion_count = 0; 270 263 if (i->lock) { … … 308 301 } 309 302 310 voidwait( condition_variable(L) & this, Duration duration ) with(this) {303 bool wait( condition_variable(L) & this, Duration duration ) with(this) { 311 304 info_thread( L ) i = { active_thread() }; 312 305 queue_info_thread_timeout(this, i, __kernel_get_time() + duration ); 313 } 314 315 void wait( condition_variable(L) & this, uintptr_t info, Duration duration ) with(this) { 306 return i.signalled; 307 } 308 309 bool wait( condition_variable(L) & this, uintptr_t info, Duration duration ) with(this) { 316 310 info_thread( L ) i = { active_thread(), info }; 317 311 queue_info_thread_timeout(this, i, __kernel_get_time() + duration ); 318 } 319 320 void wait( condition_variable(L) & this, Time time ) with(this) { 312 return i.signalled; 313 } 314 315 bool wait( condition_variable(L) & this, Time time ) with(this) { 321 316 info_thread( L ) i = { active_thread() }; 322 317 queue_info_thread_timeout(this, i, time); 323 } 324 325 void wait( condition_variable(L) & this, uintptr_t info, Time time ) with(this) { 318 return i.signalled; 319 } 320 321 bool wait( condition_variable(L) & this, uintptr_t info, Time time ) with(this) { 326 322 info_thread( L ) i = { active_thread(), info }; 327 323 queue_info_thread_timeout(this, i, time); 324 return i.signalled; 328 325 } 329 326 … … 340 337 } 341 338 342 voidwait( condition_variable(L) & this, L & l, Duration duration ) with(this) {339 bool wait( condition_variable(L) & this, L & l, Duration duration ) with(this) { 343 340 info_thread(L) i = { active_thread() }; 344 341 i.lock = &l; 345 342 queue_info_thread_timeout(this, i, __kernel_get_time() + duration ); 346 } 347 348 void wait( condition_variable(L) & this, L & l, uintptr_t info, Duration duration ) with(this) { 343 return i.signalled; 344 } 345 346 bool wait( condition_variable(L) & this, L & l, uintptr_t info, Duration duration ) with(this) { 349 347 info_thread(L) i = { active_thread(), info }; 350 348 i.lock = &l; 351 349 queue_info_thread_timeout(this, i, __kernel_get_time() + duration ); 352 } 353 354 void wait( condition_variable(L) & this, L & l, Time time ) with(this) { 350 return i.signalled; 351 } 352 353 bool wait( condition_variable(L) & this, L & l, Time time ) with(this) { 355 354 info_thread(L) i = { active_thread() }; 356 355 i.lock = &l; 357 356 queue_info_thread_timeout(this, i, time ); 358 } 359 360 void wait( condition_variable(L) & this, L & l, uintptr_t info, Time time ) with(this) { 357 return i.signalled; 358 } 359 360 bool wait( condition_variable(L) & this, L & l, uintptr_t info, Time time ) with(this) { 361 361 info_thread(L) i = { active_thread(), info }; 362 362 i.lock = &l; 363 363 queue_info_thread_timeout(this, i, time ); 364 } 365 } 364 return i.signalled; 365 } 366 }
Note: See TracChangeset
for help on using the changeset viewer.