lilinux執行緒間通訊和同步(自旋鎖和互斥鎖)

2021-10-08 08:06:33 字數 1828 閱讀 7073

1.pthread_mutex_init互斥鎖初始化

函式原型:int pthread_mutex_init(pthread_mutex_t *restrict mutex, const pthread_mutexattr_t *restrict attr);

函式功能:初始化互斥鎖

函式引數:mutex 互斥鎖控制代碼

attr 互斥鎖屬性

返回值:成功返回0,失敗返回對應的錯誤碼

說明:初始化乙個已經初始化過的互斥鎖會導致未知的問題;

mutex如果是靜態分配的,可以用pthread_mutex_initializer進行初始化,如果是動態分配的,需要用attr宣告其屬性;

2.pthread_mutex_destroy銷毀互斥鎖

函式原型: int pthread_mutex_destroy(pthread_mutex_t *mutex);

函式功能:初始化互斥鎖

函式引數:mutex 互斥鎖控制代碼

返回值:成功返回0,失敗返回對應的錯誤碼

說明:銷毀乙個未釋放的互斥鎖會導致未知的問題;

3.pthread_mutex_lock獲取互斥鎖

函式原型: int pthread_mutex_lock(pthread_mutex_t *mutex);

函式功能:獲取乙個互斥鎖

函式引數:mutex 互斥鎖控制代碼

返回值:成功返回0,失敗返回對應的錯誤碼

說明:銷毀乙個未釋放的互斥鎖會導致未知的問題;

4.pthread_mutex_timedlock獲取互斥鎖並設定超時

函式原型: int pthread_mutex_timedlock(pthread_mutex_t *restrict mutex, const struct timespec *restrict abs_timeout);

函式功能:獲取互斥鎖,如果這個互斥鎖被別的執行緒鎖定,那麼超過abs_timeout指定的時間自動退出

返回值:成功返回0,如果鎖被其它執行緒鎖定,返回ebusy

5.pthread_mutex_trylock非阻塞獲取鎖

函式原型: int pthread_mutex_trylock(pthread_mutex_t *mutex);

函式功能:以非阻塞的方式獲取互斥鎖

返回值:成功返回0,如果鎖被其它執行緒鎖定,返回ebusy

1.pthread_spin_init初始化

函式原型:int pthread_spin_init(pthread_spinlock_t *lock, int pshared);

函式引數:lock 自旋鎖控制代碼

pshared pthread_process_shared表示自旋鎖允許多程序使用,pthread_process_private只允許同一程序下的多個執行緒使用

2.pthread_spin_lock獲取鎖,阻塞方式

函式原型:int pthread_spin_lock(pthread_spinlock_t *lock);
3.pthread_spin_unlock釋放鎖

函式原型: int pthread_spin_unlock(pthread_spinlock_t *lock);
4.pthread_spin_trylock非阻塞方式

函式原型: int pthread_spin_trylock(pthread_spinlock_t *lock);

程序間通訊 和 執行緒間同步

前經常搞混,所以記錄下來。程序間通訊主要是指多個程序間的資料互動。而執行緒間同步主要指維護多個執行緒之間資料準確 一致性。一.程序間通訊主要有以下幾種方式 管道 pipe 管道是一種半雙工的通訊方式,資料只能單向流動,而且只能在具有親緣關係的程序間使用。程序的親緣關係通常是指父子程序關係。有名管道 ...

執行緒間通訊 同步

同步 是指多個任務按照約定的先後次序 相互配合完成一件事情 訊號量 由訊號量決定 執行緒是繼續執行 還是阻塞等待 訊號量代表某種資源 其值表示系統中該資源的數量 訊號量是乙個受保護的量 只能通過特定的三種操作來訪問 初始化p操作 申請資源,有可能阻塞 v操作 釋放資源,不會阻塞 p s 操作 if ...

同步執行緒和程序間的通訊

最近回去學習了一下程序和程序間的通訊,有時候很多東西久不看了也就一下子忘了 這裡面有好幾個互斥物件使用執行緒的 1 void mlisttext cstring str 26 789dword winapi thread1 lpvoid lpparameter 1024 25dword winapi...