Unix/Linux編程實踐教程筆記【chap14】

  1. 線程的直觀定義
    線程對於函數就類似於進程相對於程序,後者爲前者提供了運行的環境。線程使得很多函數可以在同一進程內併發執行。

  2. 創建進程pthread_create(頭文件#include <pthread.h>)

    int pthread_create(
          pthread_t       *thread,   #指向pthread_t類型的變量指針
          pthread_attr_t  *attr,  #指向pthread_attr_t類型的變量指針或者空指針
          void            *(*func)(void*) , #指向線程所運行的函數的指針
          void           *arg  #傳遞給func的參數
          );
  3. 掛起調用線程直至指定線程終止pthread_join

    int pthread_join(
        pthread_t thread, #等待的線程
        void* *retval #指向線程返回值的變量
        )
    
  4. 在線程中使用互斥量來進行同步

    pthread_mutex_t counter_lock = PYHREAD_MUTEX_INITIALIZER;  #聲明互斥量
    pthread_mutex_lock(&counter_lock);  #互斥量加鎖
    pthread_mutex_unlock(&counter_lock); #互斥量解鎖
  5. 線程只能傳遞給函數一個參數,可以用結構體的方式來隱式傳遞多個參數

  6. 線程條件變量的使用

    
    #include <pthread.h>
    
    int pthread_cond_wait(pthread_cond_t *cond, pthread_mutex_t *mutex)
    /*本函數會將線程掛起知道另一個線程通過條件變量發出消息。函數先自動釋放指定的鎖,然後等待條件變量變化,
    返回原線程後互斥量自動重新上鎖*/
    
    #include <pthread.h>
    
    int pthread_cond_signal(pthread_cond_t *cond)
    /*通過條件變量發消息,若有多個線程都在等待,則只喚醒其中一個線程*/
  7. 防止殭屍線程:獨立線程(detached threads)
    一些場景如web服務器並不需要等待線程返回,但如果不使用pthread_join回收線程資源的話會導致殭屍線程,因此這種場景可以使用結束後自動釋放資源的獨立線程

    /*creating a detached thread*/
    pthread_t  t;
    pthread_attr_t attr_detached;
    pthread_attr_init(&attr_detached);
    pthread_attr_setdetached(&attr_detached,PTHREAD_CREATE_DETACHED);
    pthread_create(&t,&attr_detached,func,arg);
    
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章