一,線程,進(jìn)程同步
為什么需要同步

微信截圖_20190818173000.png
1.線程同步
以下都是對資源加鎖
- 互斥量(互斥鎖)
邏輯開始加個(gè)鎖,結(jié)束再解鎖,其他進(jìn)程,線程不可以中途執(zhí)行
操作系統(tǒng)互斥量API:pthread_mutex_t
缺點(diǎn):性能損耗大,耗時(shí)增加 - 自旋鎖
同互斥量原理相似,不同點(diǎn)是不會讓出CPU,不適合單核CPU,會造成等待
優(yōu)勢,避免了進(jìn)程,線程切換,上下文切換的開銷,提高速度
這里沒有聽懂,再去查查資料
- 讀寫鎖
因?yàn)榇嬖诙嘧x少寫類型的資源,為提升效率,讀取操作不上鎖。
讀寫鎖是一種自旋鎖,只對寫操作之間,讀寫之間,是互斥的。 - 條件變量
允許線程睡眠,知道滿足條件,喚醒線程;來處理0和滿載兩個(gè)極端值的情況。
2.進(jìn)程同步
-
共享內(nèi)存
正常情況下,每個(gè)進(jìn)程有自己的進(jìn)程空間,通過自己的頁表管理,指向物理內(nèi)存的地址。
多個(gè)進(jìn)程共用物理內(nèi)存,又相互獨(dú)立。
共享內(nèi)存就是兩個(gè)進(jìn)程可以使用同一塊物理內(nèi)存
捕獲.PNG
捕獲.PNG - Unix域套接字(進(jìn)程通信方法)
類似網(wǎng)絡(luò)變成的套接字(socket)
3.使用fork系統(tǒng)調(diào)用 創(chuàng)建進(jìn)程
fork函數(shù)無參數(shù),創(chuàng)建的子進(jìn)程會擁有和父進(jìn)程一樣的所有狀態(tài)。
調(diào)用一次,返回兩次,為子進(jìn)程的id和0(0是繼承自父進(jìn)程的fork函數(shù)返回的空,id是父進(jìn)程的返回)