iOS多线程之pthread

2018-05-05  本文已影响0人  CoderJay

什么是pthread

POSIX线程(POSIX threads),简称Pthreads,是线程的POSIX标准。该标准定义了创建和操纵线程的一整套API。在类Unix操作系统(Unix、Linux、Mac OS X等)中,都使用Pthreads作为操作系统的线程。

pthread的使用

一般情况在iOS开发中我们很少使用pthread来创建线程,pthread常见跨平台框架中多线程创建。pthread是c语言框架,在程序开发过程中需要程序员自己管理内存。

1、使用pthread创建线程

在使用pthread创建线程前需要导入:#import<pthread.h>

- (void)pthreadDemo{

//    pthread属于POSIX多线程开发框架

    /**线程创建

     *参数1:<#pthread_t  _Nullable *restrict _Nonnull#> 指向线程代号的指针

     *参数2:<#const pthread_attr_t *restrict _Nullable#> 线程的属性

     *参数3:<#void * _Nullable (* _Nonnull)(void * _Nullable)#> 指向函数(线程要执行的函数)的指针

      void *  (*)      (void *)

     返回值  (函数指针)  (参数)

     void *  和OC中的  id 是等价的!

     *参数4:<#void *restrict _Nullable#> 传递给该函数的参数

     返回值:在c语言框架中常见,0表示正确,非0表示不正确

     */

    NSString *str = @"pthreadDemo";

    pthread_tthreadId;

    intresult =pthread_create(&threadId,NULL, &demo, (__bridgevoid*)str);//混合开发时,如果在 C 和 OC 之间传递数据,需要使用 __bridge 进行桥接,桥接的目的就是为了告诉编译器如何管理内存。

    if(result ==noErr) {// noErr == 0

        NSLog(@"OK");

    }else{

        NSLog(@"error %d",result);

    }

}

//线程要执行的函数

void*demo(void*para){

    NSLog(@"%@%@",[NSThread currentThread],para);

    return NULL;

}

2、pthread内置函数

pthread_create()://创建一个线程

pthread_exit()://终止当前线程

pthread_cancel()://中断另外一个线程的运行

pthread_join()://阻塞当前的线程,直到另外一个线程运行结束

pthread_attr_init()://初始化线程的属性

pthread_attr_setdetachstate()://设置脱离状态的属性(决定这个线程在终止时是否可以被结合)

pthread_attr_getdetachstate()://获取脱离状态的属性

pthread_attr_destroy()://删除线程的属性

pthread_kill()://向线程发送一个信号

用于 mutex 和条件变量

pthread_mutex_init()     //初始化互斥锁

pthread_mutex_destroy()    // 删除互斥锁

pthread_mutex_lock():    //占有互斥锁(阻塞操作)

pthread_mutex_trylock():    //试图占有互斥锁(不阻塞操作)。即,当互斥锁空闲时,将占有该锁;否则,立即返回。

pthread_mutex_unlock():     //释放互斥锁

pthread_cond_init():    //初始化条件变量

pthread_cond_destroy():    //销毁条件变量

pthread_cond_signal():     //唤醒第一个调用pthread_cond_wait()而进入睡眠的线程

pthread_cond_wait():     //等待条件变量的特殊条件发生

Thread-local storage(或者以Pthreads术语,称作线程特有数据):

pthread_key_create():     //分配用于标识进程中线程特定数据的键

pthread_setspecific():     //为指定线程特定数据键设置线程特定绑定

pthread_getspecific():         //获取调用线程的键绑定,并将该绑定存储在 value 指向的位置中

pthread_key_delete():     //销毁现有线程特定数据键

pthread_attr_getschedparam();    //获取线程优先级

pthread_attr_setschedparam();    //设置线程优先级

pthread_equal():     //对两个线程的线程标识号进行比较

pthread_detach():     //分离线程

pthread_self():     //查询线程自身线程标识号


上一篇下一篇

猜你喜欢

热点阅读