多執行緒之間同步

2021-08-20 03:28:16 字數 2124 閱讀 9445

1、posix訊號量

#includeint sem_init(sem_t* sem, int pshared, unsigned int value);

int sem_destroy(sem_t* sem);

int sem_wait(sem_t* sem);

sem_trywait(sem_t* sem);

int sem_post(sem_t* sem);

這組函式的第乙個引數sem標識被操作的訊號量。下面分別介紹每個函式:

2.1、互斥鎖

#includeint pthread_mutex_init(pthread_mutex_t* mutex, const pthread_mutexattr_t* mutexattr);

int pthread_mutex_destroy(pthread_mutex_t* mutex);

int pthread_mutex_lock(pthread_mutex_t* mutex);

int pthread_mutex_trylock(pthread_mutex_t* mutex);

int pthread_mutex_unlock(pthread_mutex_t* mutex);

pthread_mutex = pthread_mutex_initializer  //將互斥鎖的各個字段初始化為0
2.2、互斥鎖屬性

pthread_mutexattr_t結構定義了互斥鎖的屬性,並且執行緒庫提供一系列的函式來操作該結構。這裡不羅列這些函式,只介紹互斥鎖較為重要的屬性。

pshared指定是否允許跨程序共享互斥鎖,可選值有二:

2. type指定互斥鎖的型別,主要的幾個型別如下:

3、條件變數

條件變數用於執行緒之間同步共享資料的值,即當某個共享資料達到某個值的時候,喚醒等待這個共享資料的執行緒。

#includeint pthread_cond_init(pthread_cond_t* cond, const pthread_condattr_t* cond_attr);

int pthread_cond_destroy(pthread_cond_t* cond);

int pthread_cond_broadcast(pthread_cond_t* cond);

int pthread_cond_signal(pthread_cond_t* cond);

int pthread_cond_wait(pthread_cond_t* cond, pthread_mutex_t* mutex);

4、執行緒同步機制包裝類

ifndef locker_h

#define locker_h

#include#include#include/*封裝訊號量*/

class sem

} /*銷毀訊號量*/

~sem()

/*等待訊號量*/

bool wait()

/*增加訊號量*/

bool post()

private:

sem_t m_sem;

};/*封裝互斥鎖*/

class locker

} /*銷毀互斥鎖*/

~locker()

/*獲取互斥鎖*/

bool lock()

/*釋放互斥鎖*/

bool unlock()

private:

pthread_mutex_t m_mutex;

};/*封裝條件變數類*/

class cond

if(pthread_cond_init(&m_cond, null) != 0)

}/*銷毀條件變數*/

~cond()

/*等待條件變數*/

bool wait()

/*喚醒等待條件變數的執行緒*/

bool signal()

private:

pthread_mutex_t m_mutex;

pthread_cond_t m_cond;

};#endif

多執行緒之間實現同步

多執行緒的前提知識,了解本節之前可先看基礎知識 一.本節目標執行緒安全 synchronized 用法 死鎖二.什麼是執行緒安全問題?面試遇到這個問題的答法 當多個執行緒同時共享同乙個全域性變數或者靜態變數,做寫的操作時,可能會發生資料衝突問題,也就是執行緒安全問題。但是若大家都做讀操作是不會發生資...

Java多執行緒之間實現同步

理解執行緒安全?synchronized用法 死鎖當多個執行緒同時共享,同乙個全域性變數或靜態變數,做寫的操作時,可能會發生資料衝突問題,也就是執行緒安全問題。但是做讀操作是不會發生資料衝突問題。案例 需求現在有100張火車票,有兩個視窗同時搶火車票,請使用多執行緒模擬搶票效果。class thre...

多執行緒之執行緒同步

pulse lockobj 表示釋放當前被lock的lockobj,容許其他執行緒呼叫。相當於暫時掛起當前執行緒 wait lockobj 表示等待當前被其他執行緒占用的lockobj。下面的 將會交替執行兩個執行緒 class ticktock console.write tick monitor...