02 多线程——Pthread

作者: CC老师_HelloCoder | 来源:发表于2017-07-28 15:47 被阅读386次

    多线程——Pthread

    前言

    Pthread线程 (POSIX threads),简称Pthreads,是线程的POSIX标准。该标准定义了创建和操作线程的一整套API,在类Unix操作系统(Unix、Linux、Max OS X)中,都使用Pthreads作为操作系统的线程。连Windows操作系统也有它的移植版pthreads-win32。
    Pthread定义了一套C语言的类型、函数与常量,它以Pthread.h头文件和一个线程库实现。

    数据类型

     pthread_t //线程ID
     pthread_attr_t //线程属性
    

    操纵函数

    pthread_create() //创建一个线程
    pthread_exit() //终止当前线程
    pthread_cancel() //中断另外一个线程的运行
    pthread_join()  //阻塞当前的线程,直到另外一个线程运行结束
    pthread_attr_init() //初始化线程的属性
    pthread_attr_setdetachstate() //设置脱离状态的属性
    pthread_attr_getdetachstate()  //获取脱离状态的属性
    pthread_attr_destory() //删除线程的属性
    pthread_kill() //向线程发送一个信号
    
    

    同步函数

    用于mutex 和 条件变量

    pthread_mutex_init() //初始化互斥锁
    pthread_mutex_destory() //删除互斥锁
    pthread_mutex_lock() //占有互斥锁(阻塞操纵)
    pthread_mutex_trylock() //试图占有互斥锁
    pthread_mutex_unlock() //释放互斥锁
    pthread_cond_init() //初始化条件变量
    pthread_cond_destory() //销毁条件变量
    pthread_cond_signal() //唤醒第一个调用等待而进入睡眠的线程
    pthread_cond_wait() //等待条件变量的特殊条件发生
    pthread_attr_getschdparam()//获取线程优先级
    pthread_attr_setschedparam() //设置线程优先级
    
    

    pthread iOS示例代码

    - (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event {
        
        [self pthreadDemo];
    }
    
    -(void)pthreadDemo{
        
        /**
         pthread 是属于 POSIX 多线程开发框架
         
         参数:
         1.指向线程代号的指针
         2.线程的属性
         3.指向函数的指针
         4.传递给该函数的参数
         
         返回值
         - 如果是0,标示正确
         - 如果非0,标示错误代码
         
         void *   (*)      (void *)
         返回值   (函数指针)  (参数)
         void *  和OC中的  id 是等价的!
         
         
         */
        NSString * str = @"hello Miss CC";
        pthread_t threadId;
        /**
         - 在 ARC 开发中,如果涉及到和C语言中的相同的数据类型进行转换,需要使用 __bridge "桥接"
         - 在 MRC 不需要
         */
        
        int result = pthread_create(&threadId, NULL, &demo, (__bridge  void *)(str));
       
        if (result == 0) {
            NSLog(@"OK");
        }else{
            NSLog(@"error %d",result);
        }
        
        
        
    }
    
    void * demo(void * param){
        NSLog(@"%@ %@",[NSThread currentThread],param);
        
        return NULL;
    }
    
    

    小结

    • C语言中的 void * 等价于 OC 中的id指针
    • 在混合开发中,C与OC之间数据传递,需要使用__bridge进行桥接。在C语言环境需要自行内存管理。
    • pthread 在iOS项目中使用的非常少见。

    小伙伴们阅读后,请喜欢一下。文章更新可以提醒到你哦~~~~

    相关文章

      网友评论

        本文标题:02 多线程——Pthread

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