天天看點

線程間機制(同步和互斥)

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

繼續閱讀