Introduction
Introduction Statistics Contact Development Disclaimer Help
tthread.h - plan9port - [fork] Plan 9 from user space
git clone git://src.adamsgaard.dk/plan9port
Log
Files
Refs
README
LICENSE
---
tthread.h (4069B)
---
1 #ifndef _THREAD_H_
2 #define _THREAD_H_ 1
3 #if defined(__cplusplus)
4 extern "C" {
5 #endif
6
7 AUTOLIB(thread)
8
9 /*
10 * basic procs and threads
11 */
12 int proccreate(void (*f)(void *arg), void *arg, unsigned …
13 int threadcreate(void (*f)(void *arg), void *arg, unsigne…
14 void threadexits(char *);
15 void threadexitsall(char *);
16 void threadsetname(char*, ...);
17 void threadsetstate(char*, ...);
18 void threadneedbackground(void);
19 char *threadgetname(void);
20 int threadyield(void);
21 int threadidle(void);
22 void _threadready(_Thread*);
23 void _threadswitch(void);
24 void _threadsetsysproc(void);
25 void _threadsleep(Rendez*);
26 _Thread *_threadwakeup(Rendez*);
27 #define yield threadyield
28 int threadid(void);
29 void _threadpin(void);
30 void _threadunpin(void);
31
32 /*
33 * I am tired of making this mistake.
34 */
35 #define exits do_not_call_exits_in_threaded_programs
36 #define _exits do_not_call__exits_in_threaded_programs
37
38
39
40 /*
41 * signals
42 */
43 void threadnotify(int(*f)(void*,char*), int);
44
45 /*
46 * daemonize
47 *
48 void threaddaemonize(void);
49 */
50
51 /*
52 * per proc and thread data
53 */
54 void **procdata(void);
55 void **threaddata(void);
56
57 /*
58 * supplied by user instead of main.
59 * mainstacksize is size of stack allocated to run threadmain
60 */
61 void threadmain(int argc, char *argv[]);
62 extern int mainstacksize;
63
64 int threadmaybackground(void);
65
66 /*
67 * channel communication
68 */
69 typedef struct Alt Alt;
70 typedef struct _Altarray _Altarray;
71 typedef struct Channel Channel;
72
73 enum
74 {
75 CHANEND,
76 CHANSND,
77 CHANRCV,
78 CHANNOP,
79 CHANNOBLK
80 };
81
82 struct Alt
83 {
84 Channel *c;
85 void *v;
86 uint op;
87 _Thread *thread;
88 };
89
90 struct _Altarray
91 {
92 Alt **a;
93 uint n;
94 uint m;
95 };
96
97 struct Channel
98 {
99 uint bufsize;
100 uint elemsize;
101 uchar *buf;
102 uint nbuf;
103 uint off;
104 _Altarray asend;
105 _Altarray arecv;
106 char *name;
107 };
108
109 /* [Edit .+1,./^$/ |cfn -h $PLAN9/src/libthread/channel.c] */
110 int chanalt(Alt *alts);
111 Channel* chancreate(int elemsize, int elemcnt);
112 void chanfree(Channel *c);
113 int channbrecv(Channel *c, void *v);
114 void* channbrecvp(Channel *c);
115 ulong channbrecvul(Channel *c);
116 int channbsend(Channel *c, void *v);
117 int channbsendp(Channel *c, void *v);
118 int channbsendul(Channel *c, ulong v);
119 int chanrecv(Channel *c, void *v);
120 void* chanrecvp(Channel *c);
121 ulong chanrecvul(Channel *c);
122 int chansend(Channel *c, void *v);
123 int chansendp(Channel *c, void *v);
124 int chansendul(Channel *c, ulong v);
125 void chansetname(Channel *c, char *fmt, ...);
126
127 #define alt chanalt
128 #define nbrecv channbrecv
129 #define nbrecvp channbrecvp
130 #define nbrecvul channbrecvul
131 #define nbsend channbsend
132 #define nbsendp channbsendp
133 #define nbsendul channbsendul
134 #define recv chanrecv
135 #define recvp chanrecvp
136 #define recvul chanrecvul
137 #define send chansend
138 #define sendp chansendp
139 #define sendul chansendul
140
141 /*
142 * reference counts
143 */
144 typedef struct Ref Ref;
145
146 struct Ref {
147 Lock lock;
148 long ref;
149 };
150
151 long decref(Ref *r);
152 long incref(Ref *r);
153
154 /*
155 * slave i/o processes
156 */
157 typedef struct Ioproc Ioproc;
158
159 /* [Edit .+1,/^$/ |cfn -h $PLAN9/src/libthread/io*.c] */
160 void closeioproc(Ioproc *io);
161 long iocall(Ioproc *io, long (*op)(va_list*), ...);
162 int ioclose(Ioproc *io, int fd);
163 int iodial(Ioproc *io, char *addr, char *local, char *dir…
164 void iointerrupt(Ioproc *io);
165 int ioopen(Ioproc *io, char *path, int mode);
166 Ioproc* ioproc(void);
167 long ioread(Ioproc *io, int fd, void *a, long n);
168 int ioread9pmsg(Ioproc*, int, void*, int);
169 long ioreadn(Ioproc *io, int fd, void *a, long n);
170 int iorecvfd(Ioproc *, int);
171 int iosendfd(Ioproc*, int, int);
172 int iosleep(Ioproc *io, long n);
173 long iowrite(Ioproc *io, int fd, void *a, long n);
174
175 /*
176 * exec external programs
177 */
178 void threadexec(Channel*, int[3], char*, char *[]);
179 void threadexecl(Channel*, int[3], char*, ...);
180 int threadspawn(int[3], char*, char*[]);
181 int threadspawnd(int[3], char*, char*[], char*);
182 int threadspawnl(int[3], char*, ...);
183 Channel* threadwaitchan(void);
184
185 /*
186 * alternate interface to threadwaitchan - don't use both!
187 */
188 Waitmsg* procwait(int pid);
189
190 #if defined(__cplusplus)
191 }
192 #endif
193 #endif /* _THREADH_ */
You are viewing proxied material from mx1.adamsgaard.dk. The copyright of proxied material belongs to its original authors. Any comments or complaints in relation to proxied material should be directed to the original authors of the content concerned. Please see the disclaimer for more details.