2011-12-22 15:19:25 +00:00
|
|
|
/*
|
|
|
|
* \brief Thread facility
|
|
|
|
* \author Christian Helmuth
|
|
|
|
* \date 2008-10-20
|
|
|
|
*/
|
|
|
|
|
|
|
|
/*
|
2013-01-10 20:44:47 +00:00
|
|
|
* Copyright (C) 2008-2013 Genode Labs GmbH
|
2011-12-22 15:19:25 +00:00
|
|
|
*
|
|
|
|
* This file is part of the Genode OS framework, which is distributed
|
|
|
|
* under the terms of the GNU General Public License version 2.
|
|
|
|
*/
|
|
|
|
|
|
|
|
#ifndef _INCLUDE__DDE_KIT__THREAD_H_
|
|
|
|
#define _INCLUDE__DDE_KIT__THREAD_H_
|
|
|
|
|
|
|
|
#include <dde_kit/lock.h>
|
|
|
|
|
|
|
|
struct dde_kit_thread;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Create thread
|
|
|
|
*
|
|
|
|
* \param fun thread function
|
|
|
|
* \param arg argument to thread function, set to NULL if not needed
|
|
|
|
* \param name thread name
|
|
|
|
*
|
|
|
|
* \return thread handle
|
|
|
|
*
|
|
|
|
* Create a new thread running the specified function with argument arg. The
|
|
|
|
* thread is assigned the given name.
|
|
|
|
*
|
|
|
|
* All DDE kit threads support thread-local storage where one data pointer may
|
|
|
|
* be stored and retrieved.
|
|
|
|
*/
|
|
|
|
struct dde_kit_thread * dde_kit_thread_create(void (*fun)(void *), void *arg, const char *name);
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Adopt calling as DDE kit thread
|
|
|
|
*
|
|
|
|
* \param name thread name
|
|
|
|
*
|
|
|
|
* \return thread handle
|
|
|
|
*/
|
|
|
|
struct dde_kit_thread * dde_kit_thread_adopt_myself(const char *name);
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Get handle of current thread
|
|
|
|
*
|
|
|
|
* \return thread handle
|
|
|
|
*/
|
|
|
|
struct dde_kit_thread * dde_kit_thread_myself(void);
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Get thread-local data of a specific thread
|
|
|
|
*
|
|
|
|
* \param thread thread handle
|
|
|
|
*
|
|
|
|
* \return thread-local data of this thread
|
|
|
|
*/
|
|
|
|
void * dde_kit_thread_get_data(struct dde_kit_thread * thread);
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Get thread-local data of current thread
|
|
|
|
*
|
|
|
|
* \return thread-local data of current thread
|
|
|
|
*/
|
|
|
|
void * dde_kit_thread_get_my_data(void);
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Set thread-local data of specific thread
|
|
|
|
*
|
|
|
|
* \param thread thread handle
|
|
|
|
* \param data thread-local data pointer
|
|
|
|
*/
|
|
|
|
void dde_kit_thread_set_data(struct dde_kit_thread *thread, void *data);
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Set thread-local data of current thread
|
|
|
|
*
|
|
|
|
* \param data thread-local data pointer
|
|
|
|
*/
|
|
|
|
void dde_kit_thread_set_my_data(void *data);
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Sleep (milliseconds)
|
|
|
|
*
|
|
|
|
* \param msecs time to sleep in milliseconds
|
|
|
|
*/
|
|
|
|
void dde_kit_thread_msleep(unsigned long msecs);
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Sleep (microseconds)
|
|
|
|
*
|
|
|
|
* \param usecs time to sleep in microseconds
|
|
|
|
*/
|
|
|
|
void dde_kit_thread_usleep(unsigned long usecs);
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Sleep (nanoseconds)
|
|
|
|
*
|
|
|
|
* \param nsecs time to sleep in nanoseconds
|
|
|
|
*/
|
|
|
|
void dde_kit_thread_nsleep(unsigned long nsecs);
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Exit current thread
|
|
|
|
*/
|
|
|
|
void dde_kit_thread_exit(void);
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Get thread name
|
|
|
|
*
|
|
|
|
* \param thread thread handle
|
|
|
|
*/
|
|
|
|
const char *dde_kit_thread_get_name(struct dde_kit_thread *thread);
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Get unique ID
|
|
|
|
*
|
|
|
|
* \param thread thread handle
|
|
|
|
* \return artificial thread ID
|
|
|
|
*
|
|
|
|
* DDE kit does not allow direct access to the thread data structure, since
|
|
|
|
* this struct contains platform-specific data types. However, applications
|
|
|
|
* might want to get some kind of ID related to a dde_kit_thread, for instance
|
|
|
|
* to use it as a Linux-like PID.
|
|
|
|
*
|
|
|
|
* XXX This function may be removed.
|
|
|
|
*/
|
|
|
|
int dde_kit_thread_get_id(struct dde_kit_thread *thread);
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Hint that this thread is done and may be scheduled somehow
|
|
|
|
*/
|
|
|
|
void dde_kit_thread_schedule(void);
|
|
|
|
|
|
|
|
#endif /* _INCLUDE__DDE_KIT__THREAD_H_ */
|