init_routine 执行函数
函数返回
只返回0值,总是成功。
有时候我们需要对一些变量只进行一次初始化。如果我们进行多次初始化程序就会出现错误。在传统的顺序编程中,一次性初始化经常通过使用布尔变量来管理。控制变量被静态初始化为0,而任何依赖于初始化的代码都能测试该变量。如果变量值仍然为0,则它能实行初始化,然后将变量置为1。以后检查的代码将跳过初始化。
线程结束后清理
函数原型
- void pthread_cleanup_pop(int execute);
- void pthread_cleanup_push(void (*routine)(void*), void *arg);
- 参数 描述
- execute 0或1,决定是否执行cleanup函数
- routine 指向清理函数的指针
- arg 传递给清理函数的参数
函数返回
2个函数都没有返回值。
pthread_cleanup_push()把指定的清理函数routine放到线程的清理函数链表里, pthread_cleanup_pop()从清理函数链表头部取出第一项函数,若execute为非0值,则执行此函数。
其他线程相关函数
函数原型
- int pthread_equal (pthread_t t1, pthread_t t2);
- pthread_t pthread_self (void);
- 参数 描述
- pthread_t 线程句柄
函数功能
pthread_equal()判断2个线程是否相等,pthread_self()获取调用线程的线程句柄。
函数返回
pthread_equal()返回0或1,相等则为1,不等则为0。pthread_self()返回调用线程的句柄。
函数原型
- int sched_get_priority_min(int policy);
- int sched_get_priority_max(int policy);
- 参数 描述
- policy 2个值可选:SCHED_FIFO,SCHED_RR
函数返回
sched_get_priority_min()返回值为0,RT-Thread里为最大优先级, sched_get_priority_max()返回值最小优先级。
其他线程相关桩函数
函数原型 int pthread_atfork(void (_prepare)(void), void (_parent)(void), void (*child)(void));
函数返回 返回EOPNOTSUPP。
函数原型 int pthread_kill(pthread_t thread, int sig);
函数返回 返回PTHREAD_SCOPE_SYSTEM。
函数原型 int pthread_spin_init (pthread_spinlock_t *lock, int pshared);
函数返回 lock无效返回EINVAL,否则返回0。
函数原型 int pthread_spin_destroy (pthread_spinlock_t *lock);
函数返回 lock无效返回EINVAL,否则返回0。
函数原型 int pthread_spin_lock (pthread_spinlock_t * lock);
函数返回 lock无效返回EINVAL,否则返回0。
函数原型 int pthread_spin_trylock (pthread_spinlock_t * lock);
函数返回 lock无效返回EINVAL,否则返回0或EBUSY。
函数原型 int pthread_spin_unlock (pthread_spinlock_t * lock);
函数返回 lock无效返回EINVAL,否则返回0或EPERM。
互斥锁属性
RT-Thread实现的互斥锁属性包括互斥锁类型和互斥锁作用域。
互斥锁属性初始化及去初始化
函数原型
- int pthread_mutexattr_init(pthread_mutexattr_t *attr);
- int pthread_mutexattr_destroy(pthread_mutexattr_t *attr);
- 参数 描述
- attr 指向互斥锁属性对象的指针
函数返回
成功返回0,参数无效返回EINVAL。
pthread_mutexattr_init()函数将使用默认值初始化attr指向的属性对象,等同于调用pthread_mutex_init()函数时将属性参数设置为NULL。
pthread_mutexattr_destroy()函数将会对attr指向的属性对象去初始化,之后可以调用pthread_mutexattr_init()函数重新初始化。
互斥锁作用域
函数原型
- int pthread_mutexattr_setpshared(pthread_mutexattr_t *attr, int pshared);
- int pthread_mutexattr_getpshared(pthread_mutexattr_t *attr, int *pshared);
- 参数 描述
- type 互斥锁类型
- pshared 有2个可选值:PTHREAD_PROCESS_PRIVATE:默认值,用于仅同步该进程中的线程。PTHREAD_PROCESS_SHARED:用于同步该进程和其他进程中的线程。
函数返回
成功返回0,参数无效返回EINVAL。
互斥锁类型
函数原型
- int pthread_mutexattr_settype(pthread_mutexattr_t *attr, int type);
- int pthread_mutexattr_gettype(const pthread_mutexattr_t *attr, int *type);
- 参数 描述
- type 互斥锁类型
- attr 指向互斥锁属性对象的指针
函数返回
成功返回0,参数无效返回EINVAL。
互斥锁的类型决定了一个线程在获取一个互斥锁时的表现方式,RT-Thread实现了3种互斥锁类型:
PTHREAD_MUTEX_NORMAL:普通锁,当一个线程加锁以后,其余请求锁的线程将形成一个等待队列,并在解锁后按先进先出方式获得锁。如果一个线程在不首先解除互斥锁的情况下尝试重新获得该互斥锁,不会产生死锁,而是返回错误码,和检错锁一样。
PTHREAD_MUTEX_RECURSIVE:嵌套锁,允许一个线程对同一个锁成功获得多次,需要相同次数的解锁释放该互斥锁。
PTHREAD_MUTEX_ERRORCHECK:检错锁,如果一个线程在不首先解除互斥锁的情况下尝试重新获得该互斥锁,则返回错误。这样就保证当不允许多次加锁时不会出现死锁。
条件变量属性
函数原型
- int pthread_condattr_init(pthread_condattr_t *attr);
- 参数 描述
- attr 指向条件变量属性对象的指针
函数功能
使用默认值PTHREAD_PROCESS_PRIVATE初始化条件变量属性attr。
函数返回
成功返回0,参数无效返回EINVAL。
函数原型
- int pthread_mutexattr_getpshared(pthread_mutexattr_t *attr, int *pshared);
- 参数 描述
- attr 指向条件变量属性对象的指针
函数功能
获取条件变量作用域。
函数返回
参数无效返回EINVAL,否则返回0,pshared指向的内存保存的值为PTHREAD_PROCESS_PRIVATE。
条件变量属性相关桩函数
函数原型 int pthread_condattr_destroy(pthread_condattr_t *attr);
函数返回 attr无效返回EINVAL,否则返回0或EPERM。
函数原型 int pthread_condattr_getclock(const pthread_condattr_t _attr, clockid_t _clock_id);
函数返回 只返回0值。
函数原型 int pthread_condattr_setclock(pthread_condattr_t *attr, clockid_t clock_id);
函数返回 只返回0值。
函数原型 int pthread_mutexattr_setpshared(pthread_mutexattr_t *attr, int pshared);
函数返回 参数无效返回EINVAL或者ENOSYS,否则返回0值。
读写锁属性
函数原型
- int pthread_rwlockattr_init (pthread_rwlockattr_t *attr);
- 参数 描述
- attr 指向读写锁属性的指针
函数功能 使用默认值PTHREAD_PROCESS_PRIVATE初始化读写锁属性attr。
函数返回 成功返回0,参数无效返回EINVAL。
函数原型
- int pthread_rwlockattr_getpshared (const pthread_rwlockattr_t *attr, int *pshared);
- 参数 描述
- attr 指向读写锁属性的指针
- pshared 指向保存读写锁作用域的指针
函数功能 获取读写锁作用域。
函数返回 参数无效返回EINVAL,否则返回0,pshared指向的内存保存的值为 PTHREAD_PROCESS_PRIVATE。
读写锁属性相关桩函数
函数原型 int pthread_rwlockattr_setpshared (pthread_rwlockattr_t *attr, int pshared);;
函数返回 参数无效返回EINVAL,否则返回0值。
函数原型 int pthread_rwlockattr_destroy (pthread_rwlockattr_t *attr);
函数返回 参数无效返回EINVAL,否则返回0值。
屏障属性
函数原型
- int pthread_barrierattr_init(pthread_barrierattr_t *attr);
- 参数 描述
- attr 指向屏障属性的指针
函数功能 使用默认值PTHREAD_PROCESS_PRIVATE初始化屏障属性attr。
函数返回 成功返回0,参数无效返回EINVAL。
函数原型
- int pthread_barrierattr_getpshared(const pthread_barrierattr_t *attr, int *pshared);
- 参数 描述
- attr 指向屏障属性的指针
- pshared 指向保存屏障作用域数据的指针
函数功能 获取屏障的作用域。
函数返回 成功返回0,参数无效返回EINVAL。
函数原型 int pthread_barrierattr_destroy(pthread_barrierattr_t *attr);
函数功能 RT-Thread具体未实现,是一个桩函数。
函数返回 参数无效返回EINVAL,否则返回0值
消息队列属性
消息队列属性控制块如下:
- struct mq_attr
- {
- long mq_flags; /* 消息队列的标志,用来表示是否阻塞 */
- long mq_maxmsg; /* 消息队列最大消息数 */
- long mq_msgsize; /* 消息队列每个消息的最大字节数 */
- long mq_curmsgs; /* 消息队列当前消息数 */
- };
函数原型 Int mq_setattr(mqd_t mqdes, const struct mq_attr _mqstat, struct mq_attr _omqstat);
函数功能 RT-Thread具体未实现,是一个桩函数。
函数返回 只返回-1。
函数原型
- int mq_getattr(mqd_t mqdes, struct mq_attr *mqstat);
- 参数 描述
- mqdes 指向消息队列控制块的指针
- mqstat 指向保存获取数据的指针
函数功能 获取消息队列属性。
函数返回 成功则返回0,参数无效则返回-1。