參考:www.cnblogs.com/forstudy/archive/2012/04/05/2433853.html 一 進程與線程 進程: 系統中程式執行和資源分配的基本單位 每個進程有自己的數據段、代碼段和堆棧段 在進行切換時需要有比較複雜的上下文切換 線程: 線程有獨立的棧段/errno/線 ...
參考:www.cnblogs.com/forstudy/archive/2012/04/05/2433853.html
一 進程與線程
進程: 系統中程式執行和資源分配的基本單位 每個進程有自己的數據段、代碼段和堆棧段 在進行切換時需要有比較複雜的上下文切換 線程: 線程有獨立的棧段/errno/線程ID/信號掩碼 線程共用當前工作目錄/代碼段/數據段/描述字/信號處理/用戶ID/組ID 上下文切換開銷, 比創建進程小很多 處理器調度的最小單元,也稱為輕量級進程 二 線程相關的函數 頭文件:#include <pthread.h> 1. pthread_t pthread_self(void); 2. int pthread_equal(pthread_t tid1 , pthread_t tid2); 3. 創建線程 •調用該線程函數的入口點 •使用函數pthread_create(),線程創建後,就開始運行相關的線程函數 4. 退出線程 •線上程函數運行完後,該線程也就退出了 •或使用函數pthread_exit(),這是線程的主動行為 •不能使用exit() 5.等待線程•由於一個進程中的多個線程是共用數據段的,通常線上程退出之後,退出線程所占用的資源並不會隨著線程的終止而得到釋放
•pthread_join()函數
類似進程的wait()/waitpid()函數,用於將當前線程掛起來等待線程的結束 是一個線程阻塞的函數,調用它的線程一直等待到被等待的線程結束為止 函數返回時,被等待線程的資源就被收回 6. 取消線程 •在別的線程中要終止另一個線程 •pthread_cancel()函數 •被取消的線程可以設置自己的取消狀態 –被取消的線程接收到另一個線程的取消請求之後,是接受還是忽略這個請求 –如果接受,是立刻進行終止操作還是等待某個函數的調用等 7.互斥鎖 互斥鎖初始化:pthread_mutex_init() 互斥鎖上鎖:pthread_mutex_lock() 互斥鎖判斷上鎖:pthread_mutex_trylock() 互斥鎖解鎖:pthread_mutex_unlock() 消除互斥鎖:pthread_mutex_destroy() 8.信號量 sem_init() 創建一個信號量,並初始化它 sem_wait()和sem_trywait(): P操作,在信號量大於零時將信號量的值減一 •區別: 若信號量小於零時,sem_wait()將會阻塞線程,sem_trywait()則會立即返回 sem_post(): V操作,將信號量的值加一同時發出信號來喚醒等待的線程 sem_getvalue(): 得到信號量的值 sem_destroy(): 刪除信號量