Changes in / [c24ef9d:ed45af6]
- Location:
- src/libcfa
- Files:
-
- 2 deleted
- 7 edited
-
Makefile.am (modified) (1 diff)
-
Makefile.in (modified) (10 diffs)
-
bits/containers.h (modified) (1 diff)
-
concurrency/kernel (modified) (1 diff)
-
concurrency/kernel.c (modified) (4 diffs)
-
concurrency/kernel_private.h (modified) (1 diff)
-
concurrency/monitor.c (modified) (1 diff)
-
concurrency/mutex (deleted)
-
concurrency/mutex.c (deleted)
Legend:
- Unmodified
- Added
- Removed
-
src/libcfa/Makefile.am
rc24ef9d red45af6 51 51 # not all platforms support concurrency, add option do disable it 52 52 if BUILD_CONCURRENCY 53 headers += concurrency/coroutine concurrency/thread concurrency/kernel concurrency/monitor concurrency/mutex53 headers += concurrency/coroutine concurrency/thread concurrency/kernel concurrency/monitor 54 54 endif 55 55 -
src/libcfa/Makefile.in
rc24ef9d red45af6 97 97 98 98 # not all platforms support concurrency, add option do disable it 99 @BUILD_CONCURRENCY_TRUE@am__append_3 = concurrency/coroutine concurrency/thread concurrency/kernel concurrency/monitor concurrency/mutex99 @BUILD_CONCURRENCY_TRUE@am__append_3 = concurrency/coroutine concurrency/thread concurrency/kernel concurrency/monitor 100 100 101 101 # not all platforms support concurrency, add option do disable it … … 153 153 containers/pair.c containers/result.c containers/vector.c \ 154 154 concurrency/coroutine.c concurrency/thread.c \ 155 concurrency/kernel.c concurrency/monitor.c concurrency/mutex.c \156 assert.c exception.c virtual.c\157 concurrency/ CtxSwitch-@MACHINE_TYPE@.S concurrency/alarm.c \158 concurrency/ invoke.c concurrency/preemption.c155 concurrency/kernel.c concurrency/monitor.c assert.c \ 156 exception.c virtual.c concurrency/CtxSwitch-@MACHINE_TYPE@.S \ 157 concurrency/alarm.c concurrency/invoke.c \ 158 concurrency/preemption.c 159 159 am__dirstamp = $(am__leading_dot)dirstamp 160 160 @BUILD_CONCURRENCY_TRUE@am__objects_1 = concurrency/libcfa_d_a-coroutine.$(OBJEXT) \ 161 161 @BUILD_CONCURRENCY_TRUE@ concurrency/libcfa_d_a-thread.$(OBJEXT) \ 162 162 @BUILD_CONCURRENCY_TRUE@ concurrency/libcfa_d_a-kernel.$(OBJEXT) \ 163 @BUILD_CONCURRENCY_TRUE@ concurrency/libcfa_d_a-monitor.$(OBJEXT) \ 164 @BUILD_CONCURRENCY_TRUE@ concurrency/libcfa_d_a-mutex.$(OBJEXT) 163 @BUILD_CONCURRENCY_TRUE@ concurrency/libcfa_d_a-monitor.$(OBJEXT) 165 164 am__objects_2 = libcfa_d_a-fstream.$(OBJEXT) \ 166 165 libcfa_d_a-iostream.$(OBJEXT) libcfa_d_a-iterator.$(OBJEXT) \ … … 189 188 containers/result.c containers/vector.c \ 190 189 concurrency/coroutine.c concurrency/thread.c \ 191 concurrency/kernel.c concurrency/monitor.c concurrency/mutex.c \192 assert.c exception.c virtual.c\193 concurrency/ CtxSwitch-@MACHINE_TYPE@.S concurrency/alarm.c \194 concurrency/ invoke.c concurrency/preemption.c190 concurrency/kernel.c concurrency/monitor.c assert.c \ 191 exception.c virtual.c concurrency/CtxSwitch-@MACHINE_TYPE@.S \ 192 concurrency/alarm.c concurrency/invoke.c \ 193 concurrency/preemption.c 195 194 @BUILD_CONCURRENCY_TRUE@am__objects_5 = concurrency/libcfa_a-coroutine.$(OBJEXT) \ 196 195 @BUILD_CONCURRENCY_TRUE@ concurrency/libcfa_a-thread.$(OBJEXT) \ 197 196 @BUILD_CONCURRENCY_TRUE@ concurrency/libcfa_a-kernel.$(OBJEXT) \ 198 @BUILD_CONCURRENCY_TRUE@ concurrency/libcfa_a-monitor.$(OBJEXT) \ 199 @BUILD_CONCURRENCY_TRUE@ concurrency/libcfa_a-mutex.$(OBJEXT) 197 @BUILD_CONCURRENCY_TRUE@ concurrency/libcfa_a-monitor.$(OBJEXT) 200 198 am__objects_6 = libcfa_a-fstream.$(OBJEXT) libcfa_a-iostream.$(OBJEXT) \ 201 199 libcfa_a-iterator.$(OBJEXT) libcfa_a-limits.$(OBJEXT) \ … … 266 264 containers/result containers/vector concurrency/coroutine \ 267 265 concurrency/thread concurrency/kernel concurrency/monitor \ 268 concurrency/mutex ${shell find stdhdr -type f -printf "%p "}\269 math gmp time_t.h clock bits/align.h bits/containers.h \270 bits/ defs.h bits/debug.h bits/locks.h concurrency/invoke.h266 ${shell find stdhdr -type f -printf "%p "} math gmp time_t.h \ 267 clock bits/align.h bits/containers.h bits/defs.h bits/debug.h \ 268 bits/locks.h concurrency/invoke.h 271 269 HEADERS = $(nobase_cfa_include_HEADERS) 272 270 am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) … … 550 548 concurrency/libcfa_d_a-monitor.$(OBJEXT): concurrency/$(am__dirstamp) \ 551 549 concurrency/$(DEPDIR)/$(am__dirstamp) 552 concurrency/libcfa_d_a-mutex.$(OBJEXT): concurrency/$(am__dirstamp) \553 concurrency/$(DEPDIR)/$(am__dirstamp)554 550 concurrency/CtxSwitch-@MACHINE_TYPE@.$(OBJEXT): \ 555 551 concurrency/$(am__dirstamp) \ … … 584 580 concurrency/$(DEPDIR)/$(am__dirstamp) 585 581 concurrency/libcfa_a-monitor.$(OBJEXT): concurrency/$(am__dirstamp) \ 586 concurrency/$(DEPDIR)/$(am__dirstamp)587 concurrency/libcfa_a-mutex.$(OBJEXT): concurrency/$(am__dirstamp) \588 582 concurrency/$(DEPDIR)/$(am__dirstamp) 589 583 concurrency/libcfa_a-alarm.$(OBJEXT): concurrency/$(am__dirstamp) \ … … 641 635 @AMDEP_TRUE@@am__include@ @am__quote@concurrency/$(DEPDIR)/libcfa_a-kernel.Po@am__quote@ 642 636 @AMDEP_TRUE@@am__include@ @am__quote@concurrency/$(DEPDIR)/libcfa_a-monitor.Po@am__quote@ 643 @AMDEP_TRUE@@am__include@ @am__quote@concurrency/$(DEPDIR)/libcfa_a-mutex.Po@am__quote@644 637 @AMDEP_TRUE@@am__include@ @am__quote@concurrency/$(DEPDIR)/libcfa_a-preemption.Po@am__quote@ 645 638 @AMDEP_TRUE@@am__include@ @am__quote@concurrency/$(DEPDIR)/libcfa_a-thread.Po@am__quote@ … … 649 642 @AMDEP_TRUE@@am__include@ @am__quote@concurrency/$(DEPDIR)/libcfa_d_a-kernel.Po@am__quote@ 650 643 @AMDEP_TRUE@@am__include@ @am__quote@concurrency/$(DEPDIR)/libcfa_d_a-monitor.Po@am__quote@ 651 @AMDEP_TRUE@@am__include@ @am__quote@concurrency/$(DEPDIR)/libcfa_d_a-mutex.Po@am__quote@652 644 @AMDEP_TRUE@@am__include@ @am__quote@concurrency/$(DEPDIR)/libcfa_d_a-preemption.Po@am__quote@ 653 645 @AMDEP_TRUE@@am__include@ @am__quote@concurrency/$(DEPDIR)/libcfa_d_a-thread.Po@am__quote@ … … 938 930 @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcfa_d_a_CFLAGS) $(CFLAGS) -c -o concurrency/libcfa_d_a-monitor.obj `if test -f 'concurrency/monitor.c'; then $(CYGPATH_W) 'concurrency/monitor.c'; else $(CYGPATH_W) '$(srcdir)/concurrency/monitor.c'; fi` 939 931 940 concurrency/libcfa_d_a-mutex.o: concurrency/mutex.c941 @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcfa_d_a_CFLAGS) $(CFLAGS) -MT concurrency/libcfa_d_a-mutex.o -MD -MP -MF concurrency/$(DEPDIR)/libcfa_d_a-mutex.Tpo -c -o concurrency/libcfa_d_a-mutex.o `test -f 'concurrency/mutex.c' || echo '$(srcdir)/'`concurrency/mutex.c942 @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) concurrency/$(DEPDIR)/libcfa_d_a-mutex.Tpo concurrency/$(DEPDIR)/libcfa_d_a-mutex.Po943 @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='concurrency/mutex.c' object='concurrency/libcfa_d_a-mutex.o' libtool=no @AMDEPBACKSLASH@944 @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@945 @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcfa_d_a_CFLAGS) $(CFLAGS) -c -o concurrency/libcfa_d_a-mutex.o `test -f 'concurrency/mutex.c' || echo '$(srcdir)/'`concurrency/mutex.c946 947 concurrency/libcfa_d_a-mutex.obj: concurrency/mutex.c948 @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcfa_d_a_CFLAGS) $(CFLAGS) -MT concurrency/libcfa_d_a-mutex.obj -MD -MP -MF concurrency/$(DEPDIR)/libcfa_d_a-mutex.Tpo -c -o concurrency/libcfa_d_a-mutex.obj `if test -f 'concurrency/mutex.c'; then $(CYGPATH_W) 'concurrency/mutex.c'; else $(CYGPATH_W) '$(srcdir)/concurrency/mutex.c'; fi`949 @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) concurrency/$(DEPDIR)/libcfa_d_a-mutex.Tpo concurrency/$(DEPDIR)/libcfa_d_a-mutex.Po950 @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='concurrency/mutex.c' object='concurrency/libcfa_d_a-mutex.obj' libtool=no @AMDEPBACKSLASH@951 @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@952 @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcfa_d_a_CFLAGS) $(CFLAGS) -c -o concurrency/libcfa_d_a-mutex.obj `if test -f 'concurrency/mutex.c'; then $(CYGPATH_W) 'concurrency/mutex.c'; else $(CYGPATH_W) '$(srcdir)/concurrency/mutex.c'; fi`953 954 932 libcfa_d_a-assert.o: assert.c 955 933 @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcfa_d_a_CFLAGS) $(CFLAGS) -MT libcfa_d_a-assert.o -MD -MP -MF $(DEPDIR)/libcfa_d_a-assert.Tpo -c -o libcfa_d_a-assert.o `test -f 'assert.c' || echo '$(srcdir)/'`assert.c … … 1259 1237 @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ 1260 1238 @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcfa_a_CFLAGS) $(CFLAGS) -c -o concurrency/libcfa_a-monitor.obj `if test -f 'concurrency/monitor.c'; then $(CYGPATH_W) 'concurrency/monitor.c'; else $(CYGPATH_W) '$(srcdir)/concurrency/monitor.c'; fi` 1261 1262 concurrency/libcfa_a-mutex.o: concurrency/mutex.c1263 @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcfa_a_CFLAGS) $(CFLAGS) -MT concurrency/libcfa_a-mutex.o -MD -MP -MF concurrency/$(DEPDIR)/libcfa_a-mutex.Tpo -c -o concurrency/libcfa_a-mutex.o `test -f 'concurrency/mutex.c' || echo '$(srcdir)/'`concurrency/mutex.c1264 @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) concurrency/$(DEPDIR)/libcfa_a-mutex.Tpo concurrency/$(DEPDIR)/libcfa_a-mutex.Po1265 @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='concurrency/mutex.c' object='concurrency/libcfa_a-mutex.o' libtool=no @AMDEPBACKSLASH@1266 @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@1267 @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcfa_a_CFLAGS) $(CFLAGS) -c -o concurrency/libcfa_a-mutex.o `test -f 'concurrency/mutex.c' || echo '$(srcdir)/'`concurrency/mutex.c1268 1269 concurrency/libcfa_a-mutex.obj: concurrency/mutex.c1270 @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcfa_a_CFLAGS) $(CFLAGS) -MT concurrency/libcfa_a-mutex.obj -MD -MP -MF concurrency/$(DEPDIR)/libcfa_a-mutex.Tpo -c -o concurrency/libcfa_a-mutex.obj `if test -f 'concurrency/mutex.c'; then $(CYGPATH_W) 'concurrency/mutex.c'; else $(CYGPATH_W) '$(srcdir)/concurrency/mutex.c'; fi`1271 @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) concurrency/$(DEPDIR)/libcfa_a-mutex.Tpo concurrency/$(DEPDIR)/libcfa_a-mutex.Po1272 @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='concurrency/mutex.c' object='concurrency/libcfa_a-mutex.obj' libtool=no @AMDEPBACKSLASH@1273 @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@1274 @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcfa_a_CFLAGS) $(CFLAGS) -c -o concurrency/libcfa_a-mutex.obj `if test -f 'concurrency/mutex.c'; then $(CYGPATH_W) 'concurrency/mutex.c'; else $(CYGPATH_W) '$(srcdir)/concurrency/mutex.c'; fi`1275 1239 1276 1240 libcfa_a-assert.o: assert.c -
src/libcfa/bits/containers.h
rc24ef9d red45af6 183 183 verify( *tail == NULL ); 184 184 return val; 185 }186 187 forall(dtype T | is_node(T))188 static inline bool ?!=?( __queue(T) & this, zero_t zero ) with( this ) {189 return head != 0;190 185 } 191 186 #endif -
src/libcfa/concurrency/kernel
rc24ef9d red45af6 43 43 extern struct cluster * mainCluster; 44 44 45 enum FinishOpCode { No_Action, Release, Schedule, Release_Schedule, Release_Multi, Release_Multi_Schedule, Callback }; 46 47 typedef void (*__finish_callback_fptr_t)(void); 45 enum FinishOpCode { No_Action, Release, Schedule, Release_Schedule, Release_Multi, Release_Multi_Schedule }; 48 46 49 47 //TODO use union, many of these fields are mutually exclusive (i.e. MULTI vs NOMULTI) 50 48 struct FinishAction { 51 49 FinishOpCode action_code; 52 /*53 // Union of possible actions54 union {55 // Option 1 : locks and threads56 struct {57 // 1 thread or N thread58 union {59 thread_desc * thrd;60 struct {61 thread_desc ** thrds;62 unsigned short thrd_count;63 };64 };65 // 1 lock or N lock66 union {67 __spinlock_t * lock;68 struct {69 __spinlock_t ** locks;70 unsigned short lock_count;71 };72 };73 };74 // Option 2 : action pointer75 __finish_callback_fptr_t callback;76 };77 /*/78 50 thread_desc * thrd; 79 thread_desc ** thrds;80 unsigned short thrd_count;81 51 __spinlock_t * lock; 82 52 __spinlock_t ** locks; 83 53 unsigned short lock_count; 84 __finish_callback_fptr_t callback;85 //*/54 thread_desc ** thrds; 55 unsigned short thrd_count; 86 56 }; 87 57 static inline void ?{}(FinishAction & this) { -
src/libcfa/concurrency/kernel.c
rc24ef9d red45af6 49 49 thread_desc * mainThread; 50 50 51 struct { __dllist_t(cluster ) list; __spinlock_t lock; } global_clusters;51 struct { __dllist_t(cluster ) list; __spinlock_t lock; } global_clusters; 52 52 53 53 //----------------------------------------------------------------------------- … … 257 257 // its final actions must be executed from the kernel 258 258 void finishRunning(processor * this) with( this->finish ) { 259 verify( ! kernelTLS.preemption_state.enabled ); 260 choose( action_code ) { 261 case No_Action: 262 break; 263 case Release: 259 if( action_code == Release ) { 260 verify( ! kernelTLS.preemption_state.enabled ); 264 261 unlock( *lock ); 265 case Schedule: 262 } 263 else if( action_code == Schedule ) { 266 264 ScheduleThread( thrd ); 267 case Release_Schedule: 265 } 266 else if( action_code == Release_Schedule ) { 267 verify( ! kernelTLS.preemption_state.enabled ); 268 268 unlock( *lock ); 269 269 ScheduleThread( thrd ); 270 case Release_Multi: 270 } 271 else if( action_code == Release_Multi ) { 272 verify( ! kernelTLS.preemption_state.enabled ); 271 273 for(int i = 0; i < lock_count; i++) { 272 274 unlock( *locks[i] ); 273 275 } 274 case Release_Multi_Schedule: 276 } 277 else if( action_code == Release_Multi_Schedule ) { 275 278 for(int i = 0; i < lock_count; i++) { 276 279 unlock( *locks[i] ); … … 279 282 ScheduleThread( thrds[i] ); 280 283 } 281 case Callback: 282 callback(); 283 default: 284 abort("KERNEL ERROR: Unexpected action to run after thread"); 284 } 285 else { 286 assert(action_code == No_Action); 285 287 } 286 288 } … … 495 497 } 496 498 497 void BlockInternal(__finish_callback_fptr_t callback) {498 disable_interrupts();499 with( *kernelTLS.this_processor ) {500 finish.action_code = Callback;501 finish.callback = callback;502 }503 504 verify( ! kernelTLS.preemption_state.enabled );505 returnToKernel();506 verify( ! kernelTLS.preemption_state.enabled );507 508 enable_interrupts( __cfaabi_dbg_ctx );509 }510 511 499 // KERNEL ONLY 512 500 void LeaveThread(__spinlock_t * lock, thread_desc * thrd) { -
src/libcfa/concurrency/kernel_private.h
rc24ef9d red45af6 48 48 void BlockInternal(__spinlock_t * locks [], unsigned short count); 49 49 void BlockInternal(__spinlock_t * locks [], unsigned short count, thread_desc * thrds [], unsigned short thrd_count); 50 void BlockInternal(__finish_callback_fptr_t callback);51 50 void LeaveThread(__spinlock_t * lock, thread_desc * thrd); 52 51 -
src/libcfa/concurrency/monitor.c
rc24ef9d red45af6 297 297 this.count = count; 298 298 299 // Sort monitors based on address 299 // Sort monitors based on address -> TODO use a sort specialized for small numbers 300 300 __libcfa_small_sort(this.m, count); 301 301
Note:
See TracChangeset
for help on using the changeset viewer.