Linux應用程式設計基礎 (8)執行緒間的同步和互斥

2021-08-09 22:51:03 字數 1515 閱讀 2149

前提引入:

多程序 共享同乙個程序的位址空間,優點是程序間容易通訊,即通過全域性變數即可完成多執行緒見的通訊。但是缺點是 當多執行緒同時訪問共享物件時,需要引入同步和互斥機制。

一、執行緒間互斥

1,互斥機制的概念:

通過互斥鎖來保證共享資料操作的完整性,互斥鎖只有兩種狀態:上鎖和解鎖。具有唯一性和排他性,對檔案來說訪問者無序。也可把互斥鎖看做是某種意義上的全域性變數,同一時刻只能有乙個執行緒持有某個互斥鎖,擁有互斥鎖的執行緒能夠對臨界資源進行操作。

2,互斥鎖機制的基本函式:

標頭檔案:

#include

函式原型:

int pthread_mutex_init (pthread_mutex_t *mutex, const pthread_mutexattr_t *mutexattr); 鎖初始化

int pthread_mutex_destroy (pthread_mutex_t *mutex); 刪除互斥鎖

int pthread_mutex_trylock (pthread_mutex_t *mutex); 加鎖,若不成功返回

int pthread_mutex_lock (pthread_mutex_t *mutex); 加鎖,若不成功阻塞

int pthread_mutex_unlock (pthread_mutex_t *mutex); 解鎖

函式引數含義:

mutex:互斥鎖

munteattr :互斥鎖屬性 null表示預設

函式返回值:

成功 0

出錯-1

二、程序間同步

1,程序間同步概念:

由多個執行緒安照約定的順序來完成同一件事情,由訊號量來決定執行緒的繼續執行還是阻塞,訊號量也就是作業系統中用到的pv操作。

訊號量控制線程:

訊號量表示一類資源,其值表示系統中該資源的數量

訊號量是一種受保護的變數:只允許三種操作:

初始化、p操作、v操作

訊號量值為乙個非負整數。

2,訊號量操作函式:

訊號量的資料型別為結構sem_t,它本質上是乙個長整型的數

標頭檔案:

#include

函式原型:

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

int sem_wait(sem_t * sem);p操作

int sem_post(sem_t * sem);v操作

int sem_getvalue(semt_t * sem); 取訊號量的值

傳參含義:

sem 訊號量 value 初始值 pshared 共享範圍(0:執行緒間使用 非0:程序間使用)

Linux串列埠應用程式設計

常見的資料通訊的基本方式可分為並行通訊與序列通訊兩種。1.並行通訊是指利用多條資料傳輸線將乙個字資料的各位元位同時傳送。它的特點是傳輸速度快,適用於傳輸距離短且傳輸速度較高的通訊。2.序列通訊是指利用一條傳輸線將資料以位元位為單位順序傳送。特點是通訊 線路簡單,利用簡單的線纜就可實現通訊,降低成本,...

Linux應用程式設計 mmap

二話不說,上來就問下那個man name mmap,munmap map or unmap files or devices into memory synopsis include void mmap void addr,size t length,int prot,int flags,int f...

IAP 應用程式設計

1 檢查是否需要對第二部分 進行更新 2 如果不需要更新則轉到4 3 執行更新操作 4 跳轉到第二部分 執行 第一部分 必須通過其它手段,如jtag或isp燒入 第二部分 可以使用第一部分 iap功能燒入,也可以和第一部分 一道燒入,以後需要程式更新是再通過第一部分iap 更新。對於stm32來說,...