美文网首页
iOS多线程之pthread

iOS多线程之pthread

作者: CoderJay | 来源:发表于2018-05-05 15:47 被阅读0次

    什么是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():     //查询线程自身线程标识号


    相关文章

      网友评论

          本文标题:iOS多线程之pthread

          本文链接:https://www.haomeiwen.com/subject/oxljrftx.html