02 多線程——Pthread

多線程——Pthread

前言

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() //設(shè)置脫離狀態(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() //設(shè)置線程優(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項目中使用的非常少見。

小伙伴們閱讀后,請喜歡一下。文章更新可以提醒到你哦~~~~

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容