⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 thread.h

📁 xenomai 很好的linux实时补丁
💻 H
字号:
/* * Written by Gilles Chanteperdrix <gilles.chanteperdrix@laposte.net>. * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License as * published by the Free Software Foundation; either version 2 of the * License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */#ifndef _POSIX_THREAD_H#define _POSIX_THREAD_H#include <posix/internal.h>typedef unsigned long long pse51_sigset_t;struct mm_struct;struct pse51_hkey {    unsigned long u_tid;    struct mm_struct *mm;};typedef struct {    pse51_sigset_t mask;    xnpqueue_t list;} pse51_sigqueue_t;struct pse51_thread {    unsigned magic;    xnthread_t threadbase;#define thread2pthread(taddr) ({                                        \    xnthread_t *_taddr = (taddr);                                       \    (_taddr                                                             \    ? ((xnthread_get_magic(_taddr) == PSE51_SKIN_MAGIC)                 \       ? ((pthread_t)(((char *)_taddr)- offsetof(struct pse51_thread,   \                                                 threadbase)))          \       : NULL)                                                          \    : NULL);                                                            \})    xnholder_t link;	/* Link in pse51_threadq */    #define link2pthread(laddr) \    ((pthread_t)(((char *)laddr) - offsetof(struct pse51_thread, link)))        pthread_attr_t attr;        /* creation attributes */    void *(*entry)(void *arg);  /* start routine */    void *arg;                  /* start routine argument */    /* For pthread_join */    void *exit_status;    xnsynch_t join_synch;       /* synchronization object, used by other threads                                   waiting for this one to finish. */    /* For pthread_cancel */    unsigned cancelstate : 2;    unsigned canceltype : 2;    unsigned cancel_request : 1;    xnqueue_t cleanup_handlers_q;    /* errno value for this thread. */    int err;    /* For signals handling. */    pse51_sigset_t sigmask;     /* signals mask. */    pse51_sigqueue_t pending;   /* Pending signals */    pse51_sigqueue_t blocked_received; /* Blocked signals received. */    /* For thread specific data. */    const void *tsd [PTHREAD_KEYS_MAX];    /* For timers. */    xnqueue_t timersq;    #if defined(__KERNEL__) && defined(CONFIG_XENO_OPT_PERVASIVE)    struct pse51_hkey hkey;#endif /* __KERNEL__ && CONFIG_XENO_OPT_PERVASIVE */};#define PSE51_JOINED_DETACHED XNTHREAD_SPARE0#define pse51_current_thread() thread2pthread(xnpod_current_thread())int *pse51_errno_location(void);static inline void thread_set_errno (int err){    if(!xnpod_interrupt_p())        *pse51_errno_location() = err;}static inline int thread_get_errno (void){    return !xnpod_interrupt_p() ? *pse51_errno_location() : 0;}#define thread_name(thread) ((thread)->attr.name)#define thread_exit_status(thread) ((thread)->exit_status)#define thread_getdetachstate(thread) ((thread)->attr.detachstate)#define thread_setdetachstate(thread, state) ((thread)->attr.detachstate=state)#define thread_getcancelstate(thread) ((thread)->cancelstate)#define thread_setcancelstate(thread, state) ((thread)->cancelstate=state)#define thread_setcanceltype(thread, type) ((thread)->canceltype=type)#define thread_getcanceltype(thread) ((thread)->canceltype)#define thread_clrcancel(thread) ((thread)->cancel_request = 0)#define thread_setcancel(thread) ((thread)->cancel_request = 1)#define thread_cleanups(thread) (&(thread)->cleanup_handlers_q)#define thread_gettsd(thread, key) ((thread)->tsd[key])#define thread_settsd(thread, key, value) ((thread)->tsd[key]=(value))void pse51_thread_abort(pthread_t thread, void *status);static inline void thread_cancellation_point (xnthread_t *thread){    pthread_t cur = thread2pthread(thread);        if(cur && cur->cancel_request        && thread_getcancelstate(cur) == PTHREAD_CANCEL_ENABLE )        pse51_thread_abort(cur, PTHREAD_CANCELED);}void pse51_thread_pkg_init(u_long rrperiod);void pse51_thread_pkg_cleanup(void);/* round-robin period. */extern xnticks_t pse51_time_slice;/* threads list */extern xnqueue_t pse51_threadq;#endif /* !_POSIX_THREAD_H */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -