feat: template, interface to implement.
This commit is contained in:
parent
86d38d7474
commit
979993b5fe
70
src/thread/thread.h
Normal file
70
src/thread/thread.h
Normal file
@ -0,0 +1,70 @@
|
||||
#ifndef __THREAD_H__
|
||||
#define __THREAD_H__
|
||||
|
||||
#ifndef USE_PTHREAD
|
||||
|
||||
/* identifiant de thread
|
||||
* NB: pourra être un entier au lieu d'un pointeur si ca vous arrange,
|
||||
* mais attention aux inconvénient des tableaux de threads
|
||||
* (consommation mémoire, cout d'allocation, ...).
|
||||
*/
|
||||
typedef void * thread_t;
|
||||
|
||||
/* recuperer l'identifiant du thread courant.
|
||||
*/
|
||||
extern thread_t thread_self(void);
|
||||
|
||||
/* creer un nouveau thread qui va exécuter la fonction func avec l'argument funcarg.
|
||||
* renvoie 0 en cas de succès, -1 en cas d'erreur.
|
||||
*/
|
||||
extern int thread_create(thread_t *newthread, void *(*func)(void *), void *funcarg);
|
||||
|
||||
/* passer la main à un autre thread.
|
||||
*/
|
||||
extern int thread_yield(void);
|
||||
|
||||
/* attendre la fin d'exécution d'un thread.
|
||||
* la valeur renvoyée par le thread est placée dans *retval.
|
||||
* si retval est NULL, la valeur de retour est ignorée.
|
||||
*/
|
||||
extern int thread_join(thread_t thread, void **retval);
|
||||
|
||||
/* terminer le thread courant en renvoyant la valeur de retour retval.
|
||||
* cette fonction ne retourne jamais.
|
||||
*
|
||||
* L'attribut noreturn aide le compilateur à optimiser le code de
|
||||
* l'application (élimination de code mort). Attention à ne pas mettre
|
||||
* cet attribut dans votre interface tant que votre thread_exit()
|
||||
* n'est pas correctement implémenté (il ne doit jamais retourner).
|
||||
*/
|
||||
extern void thread_exit(void *retval) __attribute__ ((__noreturn__));
|
||||
|
||||
/* Interface possible pour les mutex */
|
||||
typedef struct thread_mutex { int dummy; } thread_mutex_t;
|
||||
int thread_mutex_init(thread_mutex_t *mutex);
|
||||
int thread_mutex_destroy(thread_mutex_t *mutex);
|
||||
int thread_mutex_lock(thread_mutex_t *mutex);
|
||||
int thread_mutex_unlock(thread_mutex_t *mutex);
|
||||
|
||||
#else /* USE_PTHREAD */
|
||||
|
||||
/* Si on compile avec -DUSE_PTHREAD, ce sont les pthreads qui sont utilisés */
|
||||
#include <sched.h>
|
||||
#include <pthread.h>
|
||||
#define thread_t pthread_t
|
||||
#define thread_self pthread_self
|
||||
#define thread_create(th, func, arg) pthread_create(th, NULL, func, arg)
|
||||
#define thread_yield sched_yield
|
||||
#define thread_join pthread_join
|
||||
#define thread_exit pthread_exit
|
||||
|
||||
/* Interface possible pour les mutex */
|
||||
#define thread_mutex_t pthread_mutex_t
|
||||
#define thread_mutex_init(_mutex) pthread_mutex_init(_mutex, NULL)
|
||||
#define thread_mutex_destroy pthread_mutex_destroy
|
||||
#define thread_mutex_lock pthread_mutex_lock
|
||||
#define thread_mutex_unlock pthread_mutex_unlock
|
||||
|
||||
#endif /* USE_PTHREAD */
|
||||
|
||||
#endif /* __THREAD_H__ */
|
Loading…
x
Reference in New Issue
Block a user