Pthreads简介

POSIX Threads简称Pthreads,POSIX是"Portable Operating System Interface"(可移植操作系统接口) 的缩写,POSIX是IEEE Computer Society为了提高不同操作系统的兼容性和应用程序的可移植性而制定的一套标准。Pthreads是线程的POSIX标准,被定义在POSIX.1c, Threads extensions (IEEE Std1003.1c-1995)标准里,该标准定义了一套C程序语言的类型、函数和常量。定义在pthread.h头文件和一个线程库里,大约有100个API,所有API都带有"pthread_"前缀,可以分为4大类:

  • 线程管理(Thread management):包括线程创建(creating)、分离(detaching)、连接(joining)及设置和查询线程属性的函数等。

  • 互斥锁(Mutex):"mutual exclusion"的缩写,用了限制线程对共享数据的访问,保护共享数据的完整性。包括创建、销毁、锁定和解锁互斥锁及一些用于设置或修改互斥量属性等函数。

  • 条件变量(Condition variable):用于共享一个互斥量的线程间的通信。包括条件变量的创建、销毁、等待和发送信号(signal)等函数。

  • 读写锁(read/write lock)和屏障(barrier):包括读写锁和屏障的创建、销毁、等待及相关属性设置等函数。

  • POSIX信号量(semaphore)和Pthreads一起使用,但不是Pthreads标准定义的一部分,被定义在POSIX.1b, Real-time extensions (IEEE Std1003.1b-1993)标准里。因此信号量相关函数的前缀是"sem"而不是"pthread"。

  • 消息队列(Message queue)和信号量一样,和Pthreads一起使用,也不是Pthreads标准定义的一部分,被定义在IEEE Std 1003.1-2001标准里。消息队列相关函数的前缀是"mq_"。


  1. 函数前缀 函数组

  1. pthread_ 线程本身和各种相关函数
  2.  
  3. pthread_attr_ 线程属性对象
  4.  
  5. Pthread_mutex_ 互斥锁
  6.  
  7. pthread_mutexattr_ 互斥锁属性对象
  8.  
  9. pthread_cond_ 条件变量
  10.  
  11. pthread_condattr_ 条件变量属性对象
  12.  
  13. pthread_rwlock_ 读写锁
  14.  
  15. pthread_rwlockattr_ 读写锁属性对象
  16.  
  17. pthread_spin_ 自旋锁
  18.  
  19. pthread_barrier_ 屏障
  20.  
  21. pthread_barrierattr_ 屏障属性对象
  22.  
  23. sem_ 信号量
  24.  
  25. mq_ 消息队列

绝大部分Pthreads的函数执行成功则返回0值,不成功则返回一个包含在\<errno.h>头文件中的错误代码。很多操作系统都支持Pthreads,比如Linux、MacOS X、 Android 和Solaris,因此使用Pthreads的函数编写的应用程序有很好的可移植性,可以在很多支持Pthreads的平台上直接编译运行。

在RT-Thread中使用POSIX

在RT-Thread中使用POSIX API接口包括几个部分:libc(例如newlib),file system,pthread等。需要在rtconfig.h中打开相关的选项:

  1. #define RT_USING_LIBC
  2. #define RT_USING_DFS
  3. #define RT_USING_DFS_DEVFS
  4. #define RT_USING_PTHREADS

RT-Thread实现了Pthreads的大部分函数和常量,按照POSIX标准定义在pthread.h、mqueue.h、semaphore.h和sched.h头文件里。Pthreads是libc的一个子库,RT-Thread中的Pthreads是基于RT-Thread内核函数的封装,使其符合POSIX标准。后续章节会详细介绍RT-Thread中实现的Pthreads函数及相关功能。