summaryrefslogtreecommitdiff
path: root/minix/lib/libddekit/src/thread.h
blob: bb05a45e904c20a9e2f19ddee6a1488bcd38f88c (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
#ifndef DDEKIT_SRC_THREAD_H
#define DDEKIT_SRC_THREAD_H 1
#include <ddekit/thread.h> 
#include <ddekit/semaphore.h> 
#include <ucontext.h>

#define DDEKIT_THREAD_NAMELEN 32
#define DDEKIT_THREAD_PRIOS 3
#define DDEKIT_THREAD_STDPRIO 1

#define DDEKIT_THREAD_STACKSIZE (4096*16)

/* This threadlib makes following assumptions:
 *  No Preemption,
 *  No signals,
 *  No blocking syscalls
 *  Threads cooperate.
 */

struct ddekit_thread {
	int id;
	int prio;
	void (*fun)(void *);
	char *stack;
	void *arg;
	void *data;
	unsigned sleep_until;
	char name[DDEKIT_THREAD_NAMELEN];
	ucontext_t ctx;
	ddekit_sem_t *sleep_sem;
	struct ddekit_thread * next;
};


void _ddekit_thread_set_myprio(int prio);
void _ddekit_thread_enqueue(ddekit_thread_t *th);
void _ddekit_thread_dequeue(ddekit_thread_t *th);
void _ddekit_thread_schedule();
void _ddekit_thread_wakeup_sleeping();
void _ddekit_print_backtrace(ddekit_thread_t *th);


#endif