執行緒間機制(同步和互斥)
阿新 • • 發佈:2019-01-02
執行緒間機制 { 多執行緒共享同一個程序子地址空間 優點: 執行緒間很容易進行通訊 1、 通過全域性變數實現資料共享和交換 缺點: 多個執行緒同時訪問共享物件時需要引入同步和互斥機制 } 執行緒的同步和互斥 { 同步 { 同步:指的是多工(執行緒)按照約定的順序相互配合完成一件事情 同步機制基於訊號量提出,訊號量來決定執行緒是繼續執行還是阻塞等待 P---V操作 訊號量是一種受保護的變數(訊號量的值是非負整數) { 初始化 P操作(申請資源)// 訊號量 - 1 V操作(釋放資源)// 訊號量 + 1 } } 互斥 { 互斥:保證共享資料資源操作的完整性 } } 訊號量操作(同步) { #include<semaphore.h> int sem_init(sem_t *sem, int pshared, unsigned int value); //初始化 sem: 初始化的訊號量 pshared:訊號量共享的範圍(0:執行緒間使用, 非0: 程序間使用) value: 訊號量初值 返回值:成功: 0 出錯:-1 int sem_wait(sem_t *sem); // P操作(申請資源) sem:訊號量 返回值:成功: 0 出錯:-1 int sem_post(sem_t *sem); // V操作(釋放資源) sem: 訊號量 返回值:成功: 0 出錯:-1 } 執行緒間互斥 { 互斥鎖主要是用來保護臨界資源(任何時候最多隻能有一個執行緒能訪問該資源) #include<phtread.h> int pthread_mutex_init(pthread_mutex_t *mutex, pthread_mutexattr_t *attr); // 初始化互斥鎖 mutex: 互斥鎖 attr: 互斥鎖屬性 // NULL表示預設屬性 返回值:成功: 0 出錯:返回錯誤號 int pthread_mutex_lock(pthread_mutex_t *mutex); // 申請互斥鎖 mutex: 互斥鎖 返回值:成功: 0 出錯:-1 int pthread_mutex_unlock(pthread_mutex_t *mutex); // 釋放互斥鎖 mutex: 互斥鎖 返回值:成功: 0 出錯:返回錯誤號 }