小驢拉磨之iOS進階-多線程(2)——Pthread

11111.jpg

首先感謝CC老師的文章:http://www.lxweimin.com/p/eac934f5e389
由于這個使用的比較少,幾乎不使用,我就炒一下CC老師的已做記錄,不在做擴展了

前言

Pthread線程 (POSIX threads),簡稱Pthreads,是線程的POSIX標準。該標準定義了創(chuàng)建和操作線程的一整套API,在類Unix操作系統(tǒng)(Unix、Linux、Max OS X)中,都使用Pthreads作為操作系統(tǒng)的線程。連Windows操作系統(tǒng)也有它的移植版pthreads-win32。
Pthread定義了一套C語言的類型、函數(shù)與常量,它以Pthread.h頭文件和一個線程庫實現(xiàn)。

數(shù)據(jù)類型

 pthread_t //線程ID
 pthread_attr_t //線程屬性

操縱函數(shù)

 pthread_create() //創(chuàng)建一個線程
pthread_exit() //終止當前線程
pthread_cancel() //中斷另外一個線程的運行
pthread_join()  //阻塞當前的線程,直到另外一個線程運行結(jié)束
pthread_attr_init() //初始化線程的屬性
pthread_attr_setdetachstate() //設置脫離狀態(tài)的屬性
pthread_attr_getdetachstate()  //獲取脫離狀態(tài)的屬性
pthread_attr_destory() //刪除線程的屬性
pthread_kill() //向線程發(fā)送一個信號

同步函數(shù)

用于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() //喚醒第一個調(diào)用等待而進入睡眠的線程
pthread_cond_wait() //等待條件變量的特殊條件發(fā)生
pthread_attr_getschdparam()//獲取線程優(yōu)先級
pthread_attr_setschedparam() //設置線程優(yōu)先級

pthread iOS示例代碼

- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event {
    
    [self pthreadDemo];
}

-(void)pthreadDemo{
    
    /**
     pthread 是屬于 POSIX 多線程開發(fā)框架
     
     參數(shù):
     1.指向線程代號的指針
     2.線程的屬性
     3.指向函數(shù)的指針
     4.傳遞給該函數(shù)的參數(shù)
     
     返回值
     - 如果是0,標示正確
     - 如果非0,標示錯誤代碼
     
     void *   (*)      (void *)
     返回值   (函數(shù)指針)  (參數(shù))
     void *  和OC中的  id 是等價的!
     
     
     */
    NSString * str = @"hello Miss CC";
    pthread_t threadId;
    /**
     - 在 ARC 開發(fā)中,如果涉及到和C語言中的相同的數(shù)據(jù)類型進行轉(zhuǎn)換,需要使用 __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;
}

小結(jié)

C語言中的 void * 等價于 OC 中的id指針
在混合開發(fā)中,C與OC之間數(shù)據(jù)傳遞,需要使用__bridge進行橋接。在C語言環(huán)境需要自行內(nèi)存管理。
pthread 在iOS項目中使用的非常少見。

持續(xù)更新,看過的求個喜歡????????

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內(nèi)容

  • 本文將從以下幾個部分來介紹多線程。 第一部分介紹多線程的基本原理。 第二部分介紹Run loop。 第三部分介紹多...
    曲年閱讀 1,287評論 2 14
  • 學習多線程,轉(zhuǎn)載兩篇大神的帖子,留著以后回顧!第一篇:關(guān)于iOS多線程,你看我就夠了 第二篇:GCD使用經(jīng)驗與技巧...
    John_LS閱讀 638評論 0 3
  • 轉(zhuǎn)自:Youtherhttps://www.cnblogs.com/youtherhome/archive/201...
    njukay閱讀 1,633評論 0 52
  • iOS中,只有主線程跟Cocoa關(guān)聯(lián),也即是在這個線程中,更新UI總是有效的,如果在其他線程中更新UI有時候會成功...
    mengyingguo閱讀 542評論 0 0
  • 在這篇文章中,我將為你整理一下 iOS 開發(fā)中幾種多線程方案,以及其使用方法和注意事項。當然也會給出幾種多線程的案...
    被吹落的風閱讀 125評論 0 0