一起来学POSIX thread 之 结构概览、基本数据类型和报错机制

来源:互联网 发布:mac系统版本列表 编辑:程序博客网 时间:2024/06/08 06:55

一起来学POSIX thread 之 结构概览、基本数据类型和报错机制

1、结构概览

任何一个线程系统都包括三个基本要素:执行环境、调度和同步。在评估一个线程系统或者比较任意两个线程系统时,都可以从比较它们对这三个方面的支持开始。

POSIX thread通过调用pthread_create来创建执行环境(线程)。创建一个线程同样也调度了该线程的执行,这将通过调用指定的“线程启动”函数开始。POSIX thread允许在创建线程时指定调度参数,或者在线程运行时设定。当线程调用pthread_exit时退出,或者从线程启动函数中返回时退出,当然还会遇到其他情况。

POSIX thread 使用互斥量来保护共享数据、使用条件变量来通信,还可以使用其他的同步机制,如信号量、管道和消息队列。互斥量允许线程在访问共享数据时锁定它,比避免其他线程的干扰。条件变量允许线程等待共享数据到达某个期望的状态(如队列空,资源可用)。

2、基本数据类型

POSIX thread 提供了一些基本类型来支持thread,它们分别是:

类型 描述

pthread_t 线程标识符

pthread_mutex_t 互斥量

pthread_cond_t 条件变量

pthread_key_t 线程私有数据访问键

pthread_attr_t 线程属性对象

pthread_mutexattr_t 互斥量属性对象

pthread_condattr_t 条件变量属性对象

pthread_once_t “一次性初始化”控制变量

所有数据类型都是“不透明的”,可移植的代码不能对这些数据类型的实现做任何假设。

3、报错机制

传统的UnixC语言,在函数调用成功时返回一个有效的值或者返回0指示调用成功,在函数调用发生错误时,会返回特定的-1值,并对全局变量errno赋值以指示具体的错误类型。

errno是一个外部整型extern int变量。由于该变量一次只能有一个值,所以只能支持进程中的单一执行流程。

POSIX thread中新函数通过返回值来表示错误状态,而不是用errno变量。当调用成功时,POSIX thread函数返回0。当发生错误时,函数返回一个包含在<errno.h>头文件中的错误代码。

为了和原有的报错机制保持兼容,POSIX thread同样提供了一个线程内的errno变量以支持其他使用errno的代码。这意味着当线程调用使用errno报错函数时,该变量值不会被其他线程重写或读取。你可以像以前一样继续使用errno变量,不过在编写新的代码时,应该考虑按照POSIX thread惯例报错,毕竟设置和读取线程内errno变量要比读写内存地址或返回函数值带来更多的开销。


原创粉丝点击