Changeset 0c78741 for src/libcfa/concurrency/monitor
- Timestamp:
- Apr 27, 2017, 2:00:07 PM (8 years ago)
- Branches:
- ADT, aaron-thesis, arm-eh, ast-experimental, cleanup-dtors, deferred_resn, demangler, enum, forall-pointer-decay, jacob/cs343-translation, jenkins-sandbox, master, new-ast, new-ast-unique-expr, new-env, no_list, persistent-indexer, pthread-emulation, qualifiedEnum, resolv-new, with_gc
- Children:
- f80ab45
- Parents:
- e464759
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
src/libcfa/concurrency/monitor
re464759 r0c78741 46 46 //----------------------------------------------------------------------------- 47 47 // Internal scheduling 48 49 struct __condition_criterion_t { 50 bool ready; //Whether or not the criterion is met (True if met) 51 monitor_desc * target; //The monitor this criterion concerns 52 struct __condition_node_t * owner; //The parent node to which this criterion belongs 53 __condition_criterion_t * next; //Intrusive linked list Next field 54 }; 55 56 struct __condition_node_t { 57 thread_desc * waiting_thread; //Thread that needs to be woken when all criteria are met 58 __condition_criterion_t * criteria; //Array of criteria (Criterions are contiguous in memory) 59 unsigned short count; //Number of criterions in the criteria 60 __condition_node_t * next; //Intrusive linked list Next field 61 }; 62 63 struct __condition_blocked_queue_t { 64 __condition_node_t * head; 65 __condition_node_t ** tail; 66 }; 67 68 void ?{}( __condition_blocked_queue_t * ); 69 void append( __condition_blocked_queue_t *, __condition_node_t * ); 70 __condition_node_t * pop_head( __condition_blocked_queue_t * ); 71 48 72 struct condition { 49 __ thread_queue_t blocked;50 monitor_desc ** monitors; 51 unsigned short monitor_count; 73 __condition_blocked_queue_t blocked; //Link list which contains the blocked threads as-well as the information needed to unblock them 74 monitor_desc ** monitors; //Array of monitor pointers (Monitors are NOT contiguous in memory) 75 unsigned short monitor_count; //Number of monitors in the array 52 76 }; 53 77
Note: See TracChangeset
for help on using the changeset viewer.