/[guile]/guile/guile-core/libguile/null-threads.h
ViewVC logotype

Diff of /guile/guile-core/libguile/null-threads.h

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 1.3 by mvo, Sun Oct 27 20:12:27 2002 UTC revision 1.4 by mvo, Mon Dec 2 00:59:27 2002 UTC
# Line 1  Line 1 
1  /* classes: h_files */  /* classes: h_files */
2    
3  #ifndef SCM_NULL_DEFS_H  #ifndef SCM_NULL_THREADS_H
4  #define SCM_NULL_DEFS_H  #define SCM_NULL_THREADS_H
5    
6  /* Copyright (C) 2002 Free Software Foundation, Inc.  /* Copyright (C) 2002 Free Software Foundation, Inc.
7   *   *
# Line 50  Line 50 
50     no new threads can be created.     no new threads can be created.
51  */  */
52    
53  #define SCM_CRITICAL_SECTION_START  /* We can't switch so don't bother trying.
54  #define SCM_CRITICAL_SECTION_END  */
55    #undef  SCM_THREAD_SWITCHING_CODE
56  #define SCM_THREAD_SWITCHING_CODE  #define SCM_THREAD_SWITCHING_CODE
57    
58  SCM_API void *scm_null_threads_data;  #define scm_t_thread int
59    
60    /* The "(void)(...)" constructs in the expansions are there to ensure
61       that the side effects of the argument expressions take place.
62    */
63    
64    #define scm_thread_create(th,proc,data) ((void)(proc), (void)(data), ENOTSUP)
65    #define scm_thread_join(th)             do { (void)(th); abort(); } while(0)
66    #define scm_thread_detach(th)           do { (void)(th); abort(); } while(0)
67    #define scm_thread_self()               0
68    
69    #define scm_t_mutex int
70    
71    #define scm_mutex_init(mx)              do { (void)(mx); } while(0)
72    #define scm_mutex_destroy(mx)           do { (void)(mx); } while(0)
73    #define scm_mutex_lock(mx)              do { (void)(mx); } while(0)
74    #define scm_mutex_trylock(mx)           ((void)(mx), 1)
75    #define scm_mutex_unlock(mx)            do { (void)(mx); } while(0)
76    
77    #define scm_t_cond int
78    
79    #define scm_cond_init(cv)               do { (void)(cv); } while(0)
80    #define scm_cond_destroy(cv)            do { (void)(cv); } while(0)
81    #define scm_cond_wait(cv,mx)            ((void)(cv), (void)(mx), ENOTSUP)
82    #define scm_cond_timedwait(cv,mx,at)    ((void)(cv), (void)(mx), (void)(at), \
83                                             ENOTSUP)
84    #define scm_cond_signal(cv)             do { (void)(cv); } while(0)
85    #define scm_cond_broadcast(cv)          do { (void)(cv); } while(0)
86    
87    #define scm_thread_select               select
88    
89    typedef void **scm_t_key;
90    
91    #define scm_key_create(keyp)            do { *(keyp) = malloc(sizeof(void*)); \
92                                               } while(0)
93    #define scm_key_delete(key)             do { free(key); } while(0)
94    #define scm_key_setspecific(key, value) do { *(key) = (value); } while(0)
95    #define scm_key_getspecific(key)        *(key)
96    
97    #if 0
98    
99    /* These are the actual prototypes of the functions/macros defined
100       above.  We list them here for reference. */
101    
102    typedef int scm_t_thread;
103    
104    SCM_API int  scm_thread_create (scm_t_thread *th,
105                                    void (*proc) (void *), void *data);
106    SCM_API void scm_thread_join (scm_t_thread th);
107    SCM_API void scm_thread_detach (scm_t_thread th);
108    SCM_API scm_t_thread scm_thread_self (void);
109    
110    typedef int scm_t_mutex;
111    
112    SCM_API void scm_mutex_init (scm_t_mutex *mx);
113    SCM_API void scm_mutex_destroy (scm_t_mutex *mx);
114    SCM_API void scm_mutex_lock (scm_t_mutex *mx);
115    SCM_API int  scm_mutex_trylock (scm_t_mutex *mx);
116    SCM_API void scm_mutex_unlock (scm_t_mutex *mx);
117    
118    typedef int scm_t_cond;
119    
120    SCM_API void scm_cond_init (scm_t_cond *cv);
121    SCM_API void scm_cond_destroy (scm_t_cond *cv);
122    SCM_API void scm_cond_wait (scm_t_cond *cv, scm_t_mutex *mx);
123    SCM_API int  scm_cond_timedwait (scm_t_cond *cv, scm_t_mutex *mx,
124                                     struct timespec *abstime);
125    SCM_API void scm_cond_signal (scm_t_cond *cv);
126    SCM_API void scm_cond_broadcast (scm_t_cond *cv);
127    
128    typedef int scm_t_key;
129    
130    SCM_API void scm_key_create (scm_t_key *keyp);
131    SCM_API void scm_key_delete (scm_t_key key);
132    SCM_API void scm_key_setspecific (scm_t_key key, const void *value);
133    SCM_API void *scm_key_getspecific (scm_t_key key);
134    
135    SCM_API int  scm_thread_select (int nfds,
136                                    SELECT_TYPE *readfds,
137                                    SELECT_TYPE *writefds,
138                                    SELECT_TYPE *exceptfds,
139                                    struct timeval *timeout);
140    
141  #define SCM_THREAD_LOCAL_DATA          (scm_null_threads_data)  #endif
 #define SCM_SET_THREAD_LOCAL_DATA(ptr) (scm_null_threads_data = (ptr))  
142    
143  #endif  /* SCM_NULL_DEFS_H */  #endif  /* SCM_NULL_THREADS_H */
144    
145  /*  /*
146    Local Variables:    Local Variables:

Legend:
Removed from v.1.3  
changed lines
  Added in v.1.4

savannah-hackers-public@gnu.org
ViewVC Help
Powered by ViewVC 1.1.26