Pthreads API解析(创建销毁线程)

Pthreads API解析

Pthread线程API可以分为四大类

1.线程管理API:包括创建,分离,等待线程的API,以及设置/查询线程属性的API。

2.互斥锁:处理线程的同步,包括互斥器的创建与销毁,加锁与解锁。以及设置与互斥器相关的属性。

3:条件变量:处理线程之间的通信,包括条件变量的创建与销毁,设置查询条件变量的属性。

4.管理读写锁以及barrier

命名约定:线程库中的所有标识符都以pthread_开头 。一些例子如下所示


创建线程


pthread_create参数:

  • thread:子程序返回的新线程的唯一标识符。
  • attr:可用于设置线程属性的对象。您可以指定一个线程属性对象,或者为默认值指定为NULL。
  • start_routine:线程在创建后将执行的C函数。
  • arg:可以传递给start_routine的单个参数 。它必须通过void类型的指针传递。如果不传递参数,则可以使用NULL。
进程可能创建的最大线程数是依赖于实现的。尝试超出限制的程序可能会失败或产生错误的结果。

线程属性:

  • 默认情况下,创建一个具有某些属性的线程。这些属性中的一些可以由程序员通过线程属性对象来更改。

  • pthread_attr_initpthread_attr_destroy用于初始化/销毁线程属性对象。

  • 然后使用其他例程查询/设置线程属性对象中的特定属性。属性包括:
    • 分离状态或等待状态
    • 计划继承
    • 计划政策
    • 计划参数
    • 安排争用范围
    • 堆栈大小
    • 堆栈地址
    • 堆栈保护(溢出)大小

  • 其中一些属性将在后面讨论

 终止线程&pthread_exit()

  • 线程可以被终止的几种方式:
    • 线程从其起始函数正常返回。它的工作已经完成了。

    • 线程调用pthread_exit子程序 - 无论其工作是否完成。

    • 线程被另一个线程通过pthread_cancel 例程取消。

    • 整个进程由于调用exec()或者exit()终止

    • 如果main()首先完成,不需要 自己 调用pthread_exit
pthread_exit() 例程允许程序员指定一个可选的终止 状态 参数。此可选参数通常返回给等待该线程结束的线程去。

在正常执行完成的子程序中,您通常可以省去调用pthread_exit() - 除非当然要将可选状态代码传回。

pthread_exit()例程不关闭文件; 在线程终止之后,线程内部打开的任何文件将保持打开状态。

如果main()最后显示调用l pthread_exit() ,那么main线程将会阻塞,知道他所创建的线程都完成。

等待以及分离线程(join detach)

join是完成线程同步的一种方法



调用pthread_join将一直等待知道线程结束。

连续调用两次该函数将引发不明确的行为

两个其他的同步手段互斥器以及条件变量将在后文讨论。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值