底层多线程pthread

本文介绍了在iOS和OS X开发中使用POSIX线程API进行多线程编程的方法。POSIX是一个跨平台的标准,提供线程管理、互斥量和条件变量等功能。通过pthread_create创建线程,pthread_exit结束线程,并使用pthread_attr_init等函数定制线程属性。新线程可以访问进程地址空间并继承一些状态,但其未决信号集会被清除。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在进行os x和ios开发的时候,经常会用到多线程来提高性能。我们经常用操作对象(operation objects)

和GCD来实现并发,但是os x和ios还提供了另外的接口来实现多线程,那就是POSIX threads API。

POSIX是一个标准,是开发跨平台多线程的最佳方法。它是基于c语言的,很高效也很方便。


POSIX标准包括3方面的内容,1,线程管理。2,互斥量(mutex)。3,条件变量(condition variables)

POSIX函数的命名规则:

pthread_    线程本身和各种线程相关函数

pthread_attr_线程属性对象

phtread_mutex_ 互斥量函数

pthread_mutexattr_互斥量属性对象

pthread_cond_   条件变量

pthread_condattr_ 条件变量属性对象

pthread_key_ 线程数据键

线程管理又包括:创建、分离、连接等内容。

创建和结束线程函数pthread_create()创建一个线程

pthread_exit()结束一个线程

pthread_attr_init()初始化一个线程属性

pthread_attr_destroy()消除一个线程属性



线程标识:

每个线程有一个线程ID。进程ID在整个系统中是唯一的,单线程ID不同,线程ID只在它所属的进程环境中有效。线程IDpthread_t数据类型来表示,它可能是一个结构,因此,必须使用pthread_equal函数来对两个线程ID进行比较。线程可以调用pthread_self函数获得自身的线程ID

#include <pthread.h>
int pthread_equal(pthread_t tid1, pthread_t tid2);
pthread_t pthread_self(void);

创建线程:

#include <pthread.h>
int pthread_create(pthread_t *restrict tidp, const pthread_attr_t *restrict attr,
void *(*start_rtn)(void *), void *restrict arg);
                       Returns: 0 if OK, error number on failure

当pthread_create成功返回时,由tidp指向的内存单元被设置为新创建线程的线程ID。attr参数用于定制各种不同的线程属性。若为NULL,则创建默认属性的线程。新创建的线程从start_rtn函数的地址开始执行,该函数只有一个无类型指针参数arg。如果需要向start_rtn函数传递的参数不止一个,那么需要把这些参数放到一个结构中,然后把这个结构的地址作为arg参数传入。pthread函数在调用失败时通常返回错误码。

         与创建进程一样,线程创建时并不能保证哪个线程会先运行:是新创建的线程还是调用线程。新创建的线程可以访问进程的地址空间,并且继承调用线程的浮点环境和信号屏蔽字,但是该线程的未决信号集被清除。





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值