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
|