1. 程式人生 > >執行緒間機制(同步和互斥)

執行緒間機制(同步和互斥)

執行緒間機制
{
	多執行緒共享同一個程序子地址空間
	優點: 執行緒間很容易進行通訊
			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
			出錯:返回錯誤號
	
	
			
}