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 |
* |
* |
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: |