pthread简介
pthread 是一套通用的多线程的 API,可以在Unix / Linux / Windows 等系统跨平台使用,使用 C 语言编写,需要程序员自己管理线程的生命周期,使用难度较大,我们在 iOS 开发中几乎不使用 pthread,但是还是来可以了解一下的。
POSIX 线程(英语:POSIX Threads,常被缩写 为 Pthreads)是 POSIX 的线程标准,定义了创建和操纵线程的一套 API。
实现 POSIX 线程标准的库常被称作 Pthreads,一般用于 Unix-like POSIX 系统,如 Linux、Solaris。但是 Microsoft Windows 上的实现也存在,例如直接使用 Windows API 实现的第三方库 pthreads-w32;而利用 Windows 的 SFU/SUA 子系统,则可以使用微软提供的一部分原生 POSIX API。
pthread的使用
首先
//
// ViewController.m
// pthread
//
// Created by 差不多先生 on 2022/6/6.
//
#import "ViewController.h"
#import <pthread.h>
@interface ViewController ()
@end
@implementation ViewController
void *run(void* param) {
for (NSInteger i = 0; i < 5; i++) {
NSLog(@"%ld-> %@", i, [NSThread currentThread]);
}
return NULL;
}
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view.
pthread_t myThread;
int res = pthread_create(&myThread, NULL, run, NULL);
if (res == 0) {
NSLog(@"创建线程成功!");
}
// 线程结束后释放所有资源
pthread_detach(myThread);
NSLog(@"%@", [NSThread currentThread]);
}
@end
可以看出这里的线程是和主线程同时进行的,四个参数的意义:
&myThread是线程对象,指向线程标识符的指针
第二个是 线程属性,默认为NULL
第三个run表示指向函数的指针,新创建的线程从run函数地址开始运行
第四个默认 为NULL,若上述函数需要参数,将地址传入
一些其他用法
pthread_create() 创建一个线程
pthread_exit() 终止当前线程
pthread_cancel() 中断另外一个线程的运行
pthread_join() 阻塞当前的线程,直到另外一个线程运行结束
pthread_attr_init() 初始化线程的属性
pthread_attr_setdetachstate() 设置脱离状态的属性(决定这个线程在终止时是否可以被结合)
pthread_attr_getdetachstate() 获取脱离状态的属性
pthread_attr_destroy() 删除线程的属性
pthread_kill() 向线程发送一个信号