線程間機制
{
多線程共享同一個程序子位址空間
優點: 線程間很容易進行通信
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
出錯:傳回錯誤号
}