分享:C語言編程——LINUX 多線程

分享:C語言編程——LINUX 多線程

1.使用多線程需要包含頭文件

#include

2.創建線程執行的函數


  1. void *func(void *arg)// *arg傳參
  2. {

  3. }

3.創建線程


  1. #include
  2. int pthread_create(pthread_t * tidp, const pthread_attr_t *attr, void *(*start_rtn)(void *), void *arg);

tid : 線程tid

attr: 線程的屬性,NULL 使用默認的屬性,如下可構造一個屬性結構體


  1. pthread_attr_t attr;
  2. pthread_attr_init(&attr);
  3. pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_JOINABLE);
  4. pthread_attr_setscope(&attr, PTHREAD_SCOPE_SYSTEM);

srart_rtn :線程執行的主題函數

arg :外部傳給srart_rtn的參數

注意:attr使用完後記得執行 pthread_attr_destroy(&attr);

4.線程退出

4.1線程執行完後隱式退出

4.2由線程本顯示調用pthread_exit函數退出

pthread_exit(void *retval)

4.3其他程序調用pthtead_cancel(指定pid)

pthread_canel(pthread_t thread)

5.一個線程等待另一個線程退出

吐過一個線程要等待另一個線程的終止,可以使用pthread_join(),該函數的作用是調用pthread_join的線程將被掛起直到等待的線程終止退出

6.線程互斥


  1. int aaa;//多線程共享的全局變量
  2. pthread_mutex_t mutex;//互斥量,這個應該也是全局變量
  3. pthread_mutex_init(&mutex,NULL);//按默認屬性初始化互斥變量
  4. //對全局變量aaa上鎖
  5. pthread_mutex_lock(&mutex);
  6. ...對aaa的操作
  7. pthread_mutex_unlock(&mutex);

7.線程同步

同步是指一個線程等待某件事情的發生,只有當等待的事件發生了線程才繼續執行,否則線程一直掛起並放棄CPU,

pthread_cond_init (pthread_cond_t *cond, const pthread_condattr_t *attr);

等待條件發生

pthread_cond_wait (pthread_cond_t *cond, pthread_mutex_t *mutex);

廣播條件已經發生

pthread_cond_broadcast (pthread_cond_t *cond) ;

解除某個等待線程

pthread_cond_signal (pthread_cond_t *cond) ;

釋放條件變量資源

pthread_cond_destroy

例子

  1. pthread_cond_t cond_audio_start;//
  2. pthread_mutex_t audio_mutex;//

  3. pthread_mutex_init(&audio_mutex, NULL);//初始化
  4. pthread_cond_init(&cond_audio_start, NULL);//初始化
  5. //等待條件發生
  6. pthread_cond_wait(&cond_audio_start, &audio_mutex);

  7. pthread_mutex_unlock(&audio_mutex);//釋放
  8. //使用完 回收資源
  9. pthread_mutex_destroy(&audio_mutex);
  10. pthread_cond_destroy(&cond_audio_start);

下面我們還是以名的生產者/消費者問題為例來闡述Linux線程的控制和通信。一組生產者線程與一組消費者線程通過緩衝區發生聯繫。生產者線程將生產的產品送入緩衝區,消費者線程則從中取出產品。緩衝區有N 個,是一個環形的緩衝池。

分享:C語言編程——LINUX 多線程

分享:C語言編程——LINUX 多線程

分享:C語言編程——LINUX 多線程

分享:C語言編程——LINUX 多線程

分享:C語言編程——LINUX 多線程

注意:編譯是加-lpthread 選項

最後祝所有程序員都能夠走上人生巔峰,讓代碼將夢想照進現實。如果大家對於學習C語言的學習方法,學習路線還有以後發展問題有任何疑問可以隨時問我,工作不忙的時候希望可以給大家解惑。關注我的頭條號,私信給我【C語言】我會發你係統學習資料以及交流學習的地址。

分享:C語言編程——LINUX 多線程


分享到:


相關文章: