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...