保護臨界資源/進行通訊
互斥量(鎖)能夠保證多線程的指令按順序執行,避免兩個線程的指令交叉執行(即 原子性)java
操做系統直接提供了互斥量的API,可以使用API完成資源的加鎖,解鎖的操做python
pthread_mutex_t
自旋鎖避免了進程或線程的**上下文切換**的開銷操做系統內部不少地方使用的是自旋鎖
自旋鎖不適合在單核CPU使用多線程pthread_spinlock_t
當臨界資源屬於 多讀少寫 的狀況,能夠採用效率更高的同步方法: 讀寫鎖 讀多寫少場景相比互斥量性能提出幾倍
pthread_rwlock_t
pthread_relock_rdlock
pthread_rwlock_wrlock
在生產消費場景中面臨如下狀況
1 緩衝區小於0時,不容許消費者消費,消費者必須等待
2 緩衝區滿時,不容許生產者往緩衝區生產,生產者必須等待
當生產者生產一個產品時,喚醒可能等待的消費者
當消費者消費一個產品時,喚醒可能等待的生產者性能pthread_cond_t 配合 互斥量(鎖)使用
pthread_cond_wait
pthread_cond_signal
1 互斥鎖 最簡單的線程同步方法,會阻塞線程
2 自旋鎖 避免上下文切換的一種線程同步方法,屬性忙等待CPU
3 讀寫鎖 爲多讀少寫的資源設計的線程同步方法,顯著提升性能
4 條件變量 相對複雜的多線程同步方法,配合互斥量,更靈活的使用場景spa
java python 等語言底層也是經過fork 建立進程
進程的線程共享進程資源,理論上進程之間因爲操做系統的進程管理機制(進程-頁表-物理內存),進程間的內存空間是相互獨立的,(進程默認是不能訪問進程空間以外的內存空間)但進程能夠經過共享內存打破這樣的限制操作系統
共內存是高性能後臺開發中最經常使用的進程同步方式
1 申請共享內存
2 鏈接到進程空間
3 使用共享內存
4 脫離進程空間&刪除線程