Posix线程编程API简介

原文: http://baike.baidu.com/view/974776.htm
http://www.blogjava.net/tinysun/archive/2010/05/29/322210.html
一、简介
   POSIX thread 称为 Posix线程 ,简称为pthread, Posix线程是指一个POSIX标准线程.
POSIX是IEEE为要在各种UNIX操作系统上运行的软件,而定义API的一系列互相关联的标准的总称,其正式称呼为IEEE 1003,而国际标准名称为ISO/IEC 9945。此标准源于一个大约开始于1985年的项目。POSIX这个名称是由理查德·斯托曼应IEEE的要求而提议的一个易于记忆的名称。它基本上是Portable Operating System Interface(可移植操作系统接口)的缩写,而X则表明其对Unix API的传承。
Linux基本上逐步实现了POSIX兼容,但并没有参加正式的POSIX认证。微软的Windows NT声称部分实现了POSIX标准。.
  pthreads定义了一套 C程序语言类型、函数与常量,它以 pthread.h 头文件和一个线程库
二、数据类型
pthread_t:线程句柄
pthread_attr_t:线程属性
pthread_t 类型定义
 
  

   typedef unsigned long int pthread_t ;
   //come from /usr/include/bits/pthread.h

用途: pthread_t 用于声明线程ID。
其他:sizeof (pthread_t) =4;
三、线程操纵函数
  pthread_create():创建一个线程.更多内容请阅读《 pthread_create简介
  pthread_exit():终止当前线程. 更多内容请阅读《 pthread_exit简介
  pthread_cancel():中断另外一个线程的运行.
示例1:
 
  

pthread_t thr ; void * res ; pthread_create (& thr , NULL , thread_start , NULL ); sleep ( 2 ); /* Allow new thread to run a while */ pthread_cancel ( thr ) pthread_join ( thr , & res ); if ( res == PTHREAD_CANCELED ) printf ( "Thread was canceled; cnt = %d\n" , cnt ); else printf ( "Thread terminated normally; cnt = %d\n" , cnt ); exit ( EXIT_SUCCESS );;

int pthread_join(pthread_t thread, void **retval);:阻塞当前的线程,直到另外一个线程运行结束。其使用请参照示例1。更多内容请阅读 pthread_exit简介
int pthread_attr_init(pthread_attr_t *attr);:初始化线程的属性.关于线程的属性请参考《 线程属性pthread_attr_t简介
int pthread_attr_destroy(pthread_attr_t *attr);:销毁一个线程属性pthread_attr_t,并且使它在重新初始化之前不能重新使用。
int pthread_kill(pthread_t thread, int sig);: 向线程发送一个信号.请在创建的线程中使用 signal函数来设置信号的处理函数,比如想把信号 SIGKILL 的处理函数设置为 sig_handler 可以这样写 signal ( SIGKILL , sig_handler )。另外注意。如果你给一个线程发送了 SIGQUIT ,但线程却没有实现signal处理函数,则整个进程退出。关于信号signal处理机制的详细内容请阅读《 Linux 信号signal处理机制
四、同步函数
以下函数通过 mutex 条件变量 来实现线程的同步
pthread_mutex_init() 初始化互斥锁
pthread_mutex_destroy() 删除互斥锁
pthread_mutex_lock():占有互斥锁(阻塞操作)
pthread_mutex_trylock():试图占有互斥锁(不阻塞操作)。即,当互斥锁空闲时,将占有该锁;否则,立即返回。
pthread_mutex_unlock(): 释放互斥锁
pthread_cond_init():初始化条件变量
pthread_cond_destroy():销毁条件变量
pthread_cond_signal(): 唤醒第一个在该条件变量上调用pthread_cond_wait()而进入睡眠的线程
pthread_cond_broadcast():尝试 唤醒所有在该条件变量上调用pthread_cond_wait()而进入睡眠的线程
pthread_cond_wait(): 等待条件变量的特殊条件发生。
五、线程特有数据
以下函数用于实现线程特有数据( Thread-local storage )
pthread_key_create(): 分配用于标识进程中线程特定数据的键
pthread_setspecific(): 为指定线程特定数据键设置线程特定绑定
pthread_getspecific(): 获取调用线程的键绑定,并将该绑定存储在 value 指向的位置中
pthread_key_delete(): 销毁现有线程特定数据键
关于此的更多内容请阅读《 Posix线程私有数据
六、工具函数
  int pthread_equal(pthread_t threadid1, pthread_t thread2) 判断两个线程ID是否相等,返回0 不相等,非零相等。
   pthread_detach(): 分离线程.关于此的更多内容请参考《 线程属性pthread_attr_t简介
   pthread_self(): 获取线程自身ID(标识号)
在线程中,线程ID的类型是pthread_t类型,由于在Linux下线程采用POSIX标准,所以,在不同的系统下,pthread_t的类型是不同的,比如在ubuntn下,是unsigned long类型,而在solaris系统中,是unsigned int类型。而在FreeBSD上才用的是结构题指针。 所以不能直接使用==判读,而应该使用pthread_equal来判断。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值