src/xcalls/condvar/futex.c

Go to the documentation of this file.
00001 
00007 #include <limits.h>
00008 #include "lowlevellock.h"
00009 #include "futex.h"
00010 
00011 TM_PURE int futex_wait(void *futex, int val)
00012 {
00013   int result;
00014 
00015   result = lll_futex_wait(futex, val);
00016 
00017   return(result);
00018 }
00019 
00020 TM_PURE 
00021 int 
00022 futex_wake(void * futex, int nwake)
00023 {
00024         lll_futex_wake(futex, nwake);
00025 
00026         return(0);
00027 }
00028 
00029 
00030 TM_PURE 
00031 int 
00032 txc_cond_event_init(txc_cond_event_t * ev)
00033 {
00034         ev->event = 0;
00035         ev->loops = 0;
00036         return(0);
00037 }
00038 
00039 
00040 TM_PURE 
00041 int 
00042 txc_cond_event_signal(txc_cond_event_t * ev) 
00043 {
00044         ev->event++;
00045         futex_wake(&ev->event, 1);
00046         return(0);
00047 }
00048 
00049 
00050 TM_PURE 
00051 int 
00052 txc_cond_event_tm_signal_body(txc_cond_event_t * ev) 
00053 {
00054         futex_wake(&ev->event, 1);
00055         return(0);
00056 }
00057 
00058 
00059 TM_CALLABLE 
00060 int 
00061 txc_cond_event_tm_signal(txc_cond_event_t * ev) 
00062 {
00063         ev->event++;
00064         txc_cond_event_tm_signal_body(ev);
00065         return(0);
00066 }
00067 
00068 
00069 TM_PURE 
00070 int 
00071 txc_cond_event_broadcast(txc_cond_event_t * ev)
00072 {
00073         ev->event++;
00074         futex_wake(&ev->event, INT_MAX);
00075         return(0);
00076 }
00077 
00078 
00079 TM_PURE 
00080 int 
00081 txc_cond_event_wait(txc_cond_event_t * ev)
00082 {
00083         futex_wait(&ev->event, ev->event);
00084         return(0);
00085 }
00086 
00087 
00088 TM_CALLABLE 
00089 int 
00090 txc_cond_event_get(txc_cond_event_t * ev)
00091 {
00092         return(ev->event);
00093 }
00094 
00095 
00096 TM_PURE 
00097 int 
00098 txc_cond_event_deferred_wait(txc_cond_event_t * ev, int val)
00099 {
00100   if (val == ev->event) {
00101     futex_wait(&ev->event, val);
00102   }
00103   return(0);
00104 }
00105 
00106 
00107 TM_PURE 
00108 void 
00109 txc_cond_event_inc(txc_cond_event_t * ev) 
00110 {
00111   ev->loops++;
00112 }

Generated on Wed Dec 9 20:32:39 2009 for xCalls by  doxygen 1.4.7