多线程四部曲之pthread

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() 向线程发送一个信号

猜你喜欢

转载自blog.csdn.net/chabuduoxs/article/details/125153978