Blame


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