init_routine 执行函数

函数返回

只返回0值,总是成功。

有时候我们需要对一些变量只进行一次初始化。如果我们进行多次初始化程序就会出现错误。在传统的顺序编程中,一次性初始化经常通过使用布尔变量来管理。控制变量被静态初始化为0,而任何依赖于初始化的代码都能测试该变量。如果变量值仍然为0,则它能实行初始化,然后将变量置为1。以后检查的代码将跳过初始化。

线程结束后清理

函数原型

  1. void pthread_cleanup_pop(int execute);
  2. void pthread_cleanup_push(void (*routine)(void*), void *arg);

  1. 参数 描述

  1. execute 01,决定是否执行cleanup函数
  2.  
  3. routine 指向清理函数的指针
  4.  
  5. arg 传递给清理函数的参数

函数返回

2个函数都没有返回值。

pthread_cleanup_push()把指定的清理函数routine放到线程的清理函数链表里, pthread_cleanup_pop()从清理函数链表头部取出第一项函数,若execute为非0值,则执行此函数。

其他线程相关函数

函数原型

  1. int pthread_equal (pthread_t t1, pthread_t t2);
  2. pthread_t pthread_self (void);

  1. 参数 描述

  1. pthread_t 线程句柄

函数功能

pthread_equal()判断2个线程是否相等,pthread_self()获取调用线程的线程句柄。

函数返回

pthread_equal()返回0或1,相等则为1,不等则为0。pthread_self()返回调用线程的句柄。

函数原型

  1. int sched_get_priority_min(int policy);
  2. int sched_get_priority_max(int policy);

  1. 参数 描述

  1. policy 2个值可选:SCHED_FIFOSCHED_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实现的互斥锁属性包括互斥锁类型和互斥锁作用域。

互斥锁属性初始化及去初始化

函数原型

  1. int pthread_mutexattr_init(pthread_mutexattr_t *attr);
  2. int pthread_mutexattr_destroy(pthread_mutexattr_t *attr);

  1. 参数 描述

  1. attr 指向互斥锁属性对象的指针

函数返回

成功返回0,参数无效返回EINVAL。

pthread_mutexattr_init()函数将使用默认值初始化attr指向的属性对象,等同于调用pthread_mutex_init()函数时将属性参数设置为NULL。

pthread_mutexattr_destroy()函数将会对attr指向的属性对象去初始化,之后可以调用pthread_mutexattr_init()函数重新初始化。

互斥锁作用域

函数原型

  1. int pthread_mutexattr_setpshared(pthread_mutexattr_t *attr, int pshared);
  2. int pthread_mutexattr_getpshared(pthread_mutexattr_t *attr, int *pshared);

  1. 参数 描述

  1. type 互斥锁类型
  2.  
  3. pshared 2个可选值:PTHREAD_PROCESS_PRIVATE:默认值,用于仅同步该进程中的线程。PTHREAD_PROCESS_SHARED:用于同步该进程和其他进程中的线程。

函数返回

成功返回0,参数无效返回EINVAL。

互斥锁类型

函数原型

  1. int pthread_mutexattr_settype(pthread_mutexattr_t *attr, int type);
  2. int pthread_mutexattr_gettype(const pthread_mutexattr_t *attr, int *type);

  1. 参数 描述

  1. type 互斥锁类型
  2.  
  3. attr 指向互斥锁属性对象的指针

函数返回

成功返回0,参数无效返回EINVAL。

互斥锁的类型决定了一个线程在获取一个互斥锁时的表现方式,RT-Thread实现了3种互斥锁类型:

  • PTHREAD_MUTEX_NORMAL:普通锁,当一个线程加锁以后,其余请求锁的线程将形成一个等待队列,并在解锁后按先进先出方式获得锁。如果一个线程在不首先解除互斥锁的情况下尝试重新获得该互斥锁,不会产生死锁,而是返回错误码,和检错锁一样。

  • PTHREAD_MUTEX_RECURSIVE:嵌套锁,允许一个线程对同一个锁成功获得多次,需要相同次数的解锁释放该互斥锁。

  • PTHREAD_MUTEX_ERRORCHECK:检错锁,如果一个线程在不首先解除互斥锁的情况下尝试重新获得该互斥锁,则返回错误。这样就保证当不允许多次加锁时不会出现死锁。

条件变量属性

函数原型

  1. int pthread_condattr_init(pthread_condattr_t *attr);

  1. 参数 描述

  1. attr 指向条件变量属性对象的指针

函数功能

使用默认值PTHREAD_PROCESS_PRIVATE初始化条件变量属性attr。

函数返回

成功返回0,参数无效返回EINVAL。

函数原型

  1. int pthread_mutexattr_getpshared(pthread_mutexattr_t *attr, int *pshared);

  1. 参数 描述

  1. 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值。

读写锁属性

函数原型

  1. int pthread_rwlockattr_init (pthread_rwlockattr_t *attr);

  1. 参数 描述

  1. attr 指向读写锁属性的指针

函数功能 使用默认值PTHREAD_PROCESS_PRIVATE初始化读写锁属性attr。

函数返回 成功返回0,参数无效返回EINVAL。

函数原型

  1. int pthread_rwlockattr_getpshared (const pthread_rwlockattr_t *attr, int *pshared);

  1. 参数 描述

  1. attr 指向读写锁属性的指针
  2.  
  3. 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值。

屏障属性

函数原型

  1. int pthread_barrierattr_init(pthread_barrierattr_t *attr);

  1. 参数 描述

  1. attr 指向屏障属性的指针

函数功能 使用默认值PTHREAD_PROCESS_PRIVATE初始化屏障属性attr。

函数返回 成功返回0,参数无效返回EINVAL。

函数原型

  1. int pthread_barrierattr_getpshared(const pthread_barrierattr_t *attr, int *pshared);

  1. 参数 描述

  1. attr 指向屏障属性的指针
  2.  
  3. pshared 指向保存屏障作用域数据的指针

函数功能 获取屏障的作用域。

函数返回 成功返回0,参数无效返回EINVAL。

函数原型 int pthread_barrierattr_destroy(pthread_barrierattr_t *attr);

函数功能 RT-Thread具体未实现,是一个桩函数。

函数返回 参数无效返回EINVAL,否则返回0值

消息队列属性

消息队列属性控制块如下:

  1. struct mq_attr
  2. {
  3. long mq_flags; /* 消息队列的标志,用来表示是否阻塞 */
  4. long mq_maxmsg; /* 消息队列最大消息数 */
  5. long mq_msgsize; /* 消息队列每个消息的最大字节数 */
  6. long mq_curmsgs; /* 消息队列当前消息数 */
  7. };

函数原型 Int mq_setattr(mqd_t mqdes, const struct mq_attr _mqstat, struct mq_attr _omqstat);

函数功能 RT-Thread具体未实现,是一个桩函数。

函数返回 只返回-1。

函数原型

  1. int mq_getattr(mqd_t mqdes, struct mq_attr *mqstat);

  1. 参数 描述

  1. mqdes 指向消息队列控制块的指针
  2.  
  3. mqstat 指向保存获取数据的指针

函数功能 获取消息队列属性。

函数返回 成功则返回0,参数无效则返回-1。