Linux程序設計讀書筆記——POSIX線程

1、首先,明確線程和進程的區別。什麼時候該用多線程,什麼時候該用多進程?Linux下的多線程和Win32下的有什麼區別?

2、線程基本函數,以pthread_開頭:

    頭文件#include <pthread.h>

    int Pthread_create(pthread_t *thread, pthread_attr_t *attr,

                                   void* (*start_routine) (void *), void *arg);//線程創建函數

    int pthread_join(pthread_t th,void **thread_return);//等待某個線程結束,第二個參數是被等待線程的返回值

    int pthread_exit(pthread_t th);//退出某個線程

3、學習多線程,肯定少不了線程間的同步與互斥(也是同步的一種)

    線程同步的實現機制有以下兩種:

    (1)信號量機制,相應的函數以sem_開頭:

            原理與操作系統中信號量機制相同,

            頭文件#include <semaphore.h>

            int sem_init(sem_t *sem, int pshared, unsigned int value);

            int sem_wait(sem_t * sem);

            int sem_post(sem_t * sem);

    int sem_destroy(sem_t *sem);

    (2)互斥量機制,相應的函數有:

            與信號量的函數非常相似

            頭文件#include <pthread.h>

            int pthread_mutex_int(pthread_mutex_t *mutex,const pyhread_mutexattr_t *mutexattr);

    int pthread_mutex_lock(pthread_mutex_t *mutex);

         int pthread_mutex_unlock(pthread_mutex_t *mutex);

            int pthread_mutex_destroy(pthread_mutex_t *mutex);

4、線程的屬性pthread_attr_t(在線程創建函數裏有這個結構屬性)

    最重要的函數:int pthread_attr_int(pthread_attr_t * attr);

    初始化一個線程屬性對象後,可以調用其他的函數設置不同的屬性行爲,這些函數_set以屬性指針和一個狀態爲形參 ;_get以屬性指針和一個狀態指針爲形參:

    (1)detachedstate:是否對線程進行重新組合,與pthead_join()有關。默認PTHREAD_CREATE_JOINABLE, PTHREAD_CREATE_DETACHED設置脫離狀態,可以允許被創建的線程獨立的完成工作,而無需原先的線程等待它。

    (2)schedulepolicy:線程調度方式,默認SCHED_OTHER,另外兩種只能用於超級用戶權限運行。

    (3)scheduleparam:與上邊屬性結合使用。

    (4)inheritsched、scope、stacksize目前用到很少。

5、取消線程

     #include <pthread.h>

     int pthread_cancel(pthread_t thread);//一個線程可以要求另一個線程終止,就像發送信號一樣

     int pthread_setcancelstate(int state,int *oldstate);//接收方設置自己的取消狀態

     其中,state:PTHREAD_CANCEL_ENABLE(接受取消請求)和PTHREAD_CANCEL_DISABLE(忽略取消請求)。

     int pthread_setcanceltype(int type, int *oldtype);//如果取消請求被接受了,進入第二個控制層次設置取消類型

     其中,type:PTHREAD_CANCEL_ASYNCHRONOUS(接收到取消請求後立即採取行動)PTHREAD_CANCEL_DEFERRED(接收到取消請求一直到線程執行了下述函數後在採取行動:pthread_join,sem_wait,phread_cond_wait,pthread_cond_timewait,

sig_wait)。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章