大嘴鸟儿童故事:POSIX线程使用概述

来源:百度文库 编辑:偶看新闻 时间:2024/04/29 18:39:31

POSIX 线程线程POSIX标准,定义了创建和操纵线程的一套 APIPOSIXIEEE为要在各种UNIX操作系统上运行的软件,而定义API的一系列互相关联的标准的总称,

实现 POSIX 线程标准的库常被称作 Pthreads,一般用于 Unix-like POSIX 系统,如 LinuxSolaris,但是 Microsoft Windows上的实现也存在,例如, pthreads-w32可以用于支持 Pthread API M的子集 [1]。(说明:在文本中,Pthreads中的P为大写)

POSIX:Portable Operating System Interface for UNIX

目录

  • 1 目录
  • 2 Example
  • 3 参考
  • 4 参见
  • 5 外部链接

[编辑] 目录

Pthreads定义了一套 C程序语言类型、函数与常量,它以 pthread.h 头文件和一个线程库实现。

数据类型

  • pthread_t:线程句柄
  • pthread_attr_t:线程属性

线程操纵函数(简介起见,省略参数):

  • pthread_create():创建一个线程
  • pthread_exit():终止当前线程
  • pthread_cancel():中断另外一个线程的运行
  • pthread_join():阻塞当前的线程,直到另外一个线程运行结束
  • pthread_attr_init():初始化线程的属性
  • pthread_attr_setdetachstate():设置脱离状态的属性(决定这个线程在终止时是否可以被结合)
  • pthread_attr_getdetachstate():获取脱离状态的属性
  • pthread_attr_destroy():删除线程的属性
  • pthread_kill():向线程发送一个信号

同步 函数: 用于 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_wait(): 等待条件变量的特殊条件发生

Thread-local storage(或者以Pthreads术语,称作 线程特有数据):

  • pthread_key_create(): 分配用于标识进程中线程特定数据的键
  • pthread_setspecific(): 为指定线程特定数据键设置线程特定绑定
  • pthread_getspecific(): 获取调用线程的键绑定,并将该绑定存储在 value 指向的位置中
  • pthread_key_delete(): 销毁现有线程特定数据键

与一起工作的工具函数:

  • pthread_equal(): 对两个线程的线程标识号进行比较
  • pthread_detach(): 分离线程
  • pthread_self(): 查询线程自身线程标识号

[编辑] Example

C中使用 Pthreads的示例:

#include #include #include #include  static void wait(void){    time_t start_time = time(NULL);     while (time(NULL) == start_time)    {        /* do nothing except chew CPU slices for up to one second */    }} static void *thread_func(void *vptr_args){    int i;     for (i = 0; i < 20; i++)    {        fputs("  b\n", stderr);        wait();    }     return NULL;} int main(void){    int i;    pthread_t thread;     if (pthread_create(&thread, NULL, thread_func, NULL) != 0)    {        return EXIT_FAILURE;    }     for (i = 0; i < 20; i++)    {        puts("a");        wait();    }     if (pthread_join(thread, NULL) != 0)    {        return EXIT_FAILURE;    }     return EXIT_SUCCESS;}

这段程序创建了一个新线程,打印含有“b”的行,主线程打印含有“a”的行。当两个线程相互切换执行时输出结果为'a'和'b'交替出现。 More tutorials can be found below in the links section.