Changeset e7c077a for libcfa/src/concurrency/kernel.cfa
- Timestamp:
- Feb 17, 2021, 12:53:05 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:
- 376946e
- Parents:
- 95b3a9c (diff), eb24cec0 (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/kernel.cfa
r95b3a9c re7c077a 109 109 static void __run_thread(processor * this, $thread * dst); 110 110 static void __wake_one(cluster * cltr); 111 static void wait(__bin_sem_t & this); 111 112 112 113 static void push (__cluster_idles & idles, processor & proc); … … 548 549 // Kernel Idle Sleep 549 550 //============================================================================================= 551 extern "C" { 552 char * strerror(int); 553 } 554 #define CHECKED(x) { int err = x; if( err != 0 ) abort("KERNEL ERROR: Operation \"" #x "\" return error %d - %s\n", err, strerror(err)); } 555 556 static void wait(__bin_sem_t & this) with( this ) { 557 verify(__cfaabi_dbg_in_kernel()); 558 CHECKED( pthread_mutex_lock(&lock) ); 559 while(val < 1) { 560 pthread_cond_wait(&cond, &lock); 561 } 562 val -= 1; 563 CHECKED( pthread_mutex_unlock(&lock) ); 564 } 565 566 static bool post(__bin_sem_t & this) with( this ) { 567 bool needs_signal = false; 568 569 CHECKED( pthread_mutex_lock(&lock) ); 570 if(val < 1) { 571 val += 1; 572 pthread_cond_signal(&cond); 573 needs_signal = true; 574 } 575 CHECKED( pthread_mutex_unlock(&lock) ); 576 577 return needs_signal; 578 } 579 580 #undef CHECKED 581 550 582 // Wake a thread from the front if there are any 551 583 static void __wake_one(cluster * this) {
Note: See TracChangeset
for help on using the changeset viewer.