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

一起来学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变量要比读写内存地址或返回函数值带来更多的开销。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值