`
java-mans
  • 浏览: 11339512 次
文章分类
社区版块
存档分类
最新评论

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);;

intpthread_join(pthread_t thread, void **retval);:阻塞当前的线程,直到另外一个线程运行结束。其使用请参照示例1。更多内容请阅读pthread_exit简介
intpthread_attr_init(pthread_attr_t *attr);:初始化线程的属性.关于线程的属性请参考《线程属性pthread_attr_t简介
intpthread_attr_destroy(pthread_attr_t *attr);:销毁一个线程属性pthread_attr_t,并且使它在重新初始化之前不能重新使用。
intpthread_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线程私有数据
六、工具函数
  intpthread_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来判断。
分享到:
评论

相关推荐

    POSIX线程编程指南

    POSIX线程编程指南 这是一个关于 Posix 线程编程的专栏。作者在阐明概念的基础上,将向您详细讲述Posix 线程库API

    Posix线程编程指南

    详细讲述Posix线程库API,线程的创建与取消,线程的私有数据,线程同步

    多线程编程指南PDF

    2 基本线程编程.............................................................................................................................................23 线程库.......................................

    多线程编程指南(系统描述了线程标准 线程同步 多线程编程原则 等)

    2 基本线程编程23 线程库................................................................................................................................................. 23 创建缺省线程...................

    《Android C++高级编程——使用NDK》_源码.zip

    主要内容:● 使用JNI将原生代码连接到Java中● 使用SWIG自动生成JNI代码● 使用POSIX线程实现多线程应用● 使用POSIX套接字实现网络应用● 使用logging、GDB和Eclipse调试器进行调试● 使用Valgrind分析内存● 使用...

    linux 多线程合集

    5本Linux多线程合集: 多线程编程指南.pdf, Linux多线程编程手册.pdf, 多线程编程技术, posix pthread API, 专家级多线程技术.Eng.pdf

    嵌入式系统/ARM技术中的QNX环境下多线程编程

    作者Email: zoutom@163.com 摘要:介绍了QNX实时操作系统和多线程编程技术,包括线程间同步的方法、多线程程序的分析步骤、线程基本程序结构以及实用编译方法。 关键词:QNX;多线程;同步;程序结构 0引言: QNX是由...

    C语言使用pthread多线程编程

    我们进行多线程编程,可以有多种选择,可以使用WindowsAPI,如果你在使用GTK,也可以使用GTK实现了的线程库,如果你想让你的程序有更多的移植性你好是选择POSIX中的Pthread函数库,我的程序是在Linux下写的,所以我...

    Android C++高级编程——使用NDK完整版

    第8章 posix socket api:面向连接的通信 183 第9章 posix socket api:无连接的通信 219 第10章 posix socket api:本地通信 231 第11章 支持c++ 245 第12章 原生图形api 255 第13章 原生音频api 303 第14章 程序...

    Linux UNIX系统编程手册

    《Linux/UNIX系统编程手册(上、下册)》总共分为64章,主要讲解了高效读写文件,对信号、时钟和定时器的运用,创建进程、执行程序,编写安全的应用程序,运用POSIX线程技术编写多线程程序,创建和使用共享库,运用...

    Android C++高级编程:使用NDK_Onur Cinar, 于红PDF电子书下载 带书签目录 完整版

    7.3.3 更新示例应用程序以使用POSIX线程 169 7.3.4 执行POSIX线程示例 174 7.4 从POSIX线程返回结果 174 7.5 POSIX线程同步 176 7.5.1 用互斥锁同步POSIX线程 176 7.5.2 使用信号量同步POSIX线程 180 7.6 ...

    Linux UNIX系统编程手册 下

    《linux/unix系统编程手册(上、下册)》总共分为64章,主要讲解了高效读写文件,对信号、时钟和定时器的运用,创建进程、执行程序,编写安全的应用程序,运用posix线程技术编写多线程程序,创建和使用共享库,运用...

    LinuxUNIX系统编程手册(上)

    《linux/unix系统编程手册(上、下册)》总共分为64章,主要讲解了高效读写文件,对信号、时钟和定时器的运用,创建进程、执行程序,编写安全的应用程序,运用posix线程技术编写多线程程序,创建和使用共享库,运用...

    Android C++高级编程使用NDK

    全文详细介绍了源生应用开发,可用的原生API以及故障排除技术,并且本书还提供了大量的java原生接口的概论,如Bionic APIK、POSIX线程和套接字等等。在你熟读本书后,你将可以轻松的将你的原生代码移植到Android平台...

    Linux/UNIX系统编程手册 上册

    《linux/unix系统编程手册(上、下册)》总共分为64章,主要讲解了高效读写文件,对信号、时钟和定时器的运用,创建进程、执行程序,编写安全的应用程序,运用posix线程技术编写多线程程序,创建和使用共享库,运用...

    UNIX网络编程卷1套接字联网API.part1.rar

    新的网络编程调试技术 源端特定的组播API,正是这个API使得IP组播开发被广泛使用 本书还更新和扩展了Stevens对以下关键的UNIX网络标准和技术所做的权威性的概括: TCP和UDP传输 基本的和高级的套接宇,路由的和...

    UNIX网络编程卷1套接字联网API.part2.rar

    新的网络编程调试技术 源端特定的组播API,正是这个API使得IP组播开发被广泛使用 本书还更新和扩展了Stevens对以下关键的UNIX网络标准和技术所做的权威性的概括: TCP和UDP传输 基本的和高级的套接宇,路由的和...

    LINUX.UNIX系统编程手册(下册)

    《linux/unix系统编程手册(上、下册)》总共分为64章,主要讲解了高效读写文件,对信号、时钟和定时器的运用,创建进程、执行程序,编写安全的应用程序,运用posix线程技术编写多线程程序,创建和使用共享库,运用...

Global site tag (gtag.js) - Google Analytics