一、互斥鎖的定義,初始化,互斥操作的實現機制?
1.互斥鎖的定義
互斥鎖,是一種訊號量,常用來防止兩個程序或執行緒在同一時刻訪問相同的共享資源。從本質上講,互斥量是一把鎖,該鎖保護乙個或者一些資源。乙個執行緒如果需要訪問該資源,必須要獲得互斥量對其加鎖。這時,如果其他執行緒想訪問該資源也必須要獲得該互斥量,但是鎖已經加鎖,所以這些程序只能阻塞,直到獲得該鎖的程序解鎖。這時阻塞的執行緒裡面有乙個執行緒獲得該互斥量並加鎖,獲准訪問該資源,其他程序繼續阻塞,周而復始。
2.互斥鎖的初始化
pthread_mutex_init函式
函式作用:用於初始化互斥鎖
函式原型:int pthread_mutex_init(pthread_mutex_t *restrict mutex,const pthread_mutexattr_t *restrict attr);
引數:mutex:互斥鎖
attr:pthread_mutex_initializer 建立快速互斥鎖
pthread_recursive_mutex_initializer_np 建立遞迴互斥鎖
pthread_errorcheck_mutex_initializer_np 建立檢錯互斥鎖
返回值:成功返回0;出錯返回-1
3.互斥鎖操作的實現機制
2中分別列印提示資訊,通過使用互斥鎖來控制線程
1和執行緒
2執行的先後順序
#include #include #include pthread_mutex_t mutex;
void *thread1(void)
pthread_mutex_unlock(&mutex);}
void *thread2(void)
pthread_mutex_unlock(&mutex);}
int main()
if(pthread_create(&id1,null,(void *)thread1,null) != 0)
if(pthread_create(&id2,null,(void *)thread2,null) != 0)
pthread_join(id1,null);
pthread_join(id2,null);
sleep(1);
return 0;
}
二、訊號量實現執行緒之間的pv操作,實現執行緒同步和互斥的資料模型?
1.sem_init函式
函式作用:初始化訊號量
函式原型:int sem_init(sem_t *sem, int pshared, unsigned int value)
引數:sem:訊號量指標
pshared:決定訊號量能否在幾個程序間共享,一般取0
value:訊號量的初始值
2.訊號的操作
int sem_wait(sem_t *sem); p操作
int sem_try_wait(sem_t *sem);
int sempost(sem_t *sem); v操作
int sem_getvalue(sem_t *sem);
int sem_destroy(sem_t *sem); 銷毀訊號
3.用訊號的pv操作來實現消費者和生產者的機制
#include #include #include #include #include #include #include #include #define max_size 1024
sem_t sem1,sem2;
char buff[max_size];
void producer(void *arg)
while(strncmp(buff,"quit",4) != 0);}
void customer(void *arg)
while(strncmp(buff,"quit",4) != 0);}
int main()
if(pthread_create(&id2,null,(void *)customer,null) != 0)
pthread_join(id1,null);
pthread_join(id2,null);
return 0;
}
linux c 多執行緒互斥鎖
beers.c include include include include include include int beers 2000000 建立互斥鎖,互斥鎖對所有可能發生衝突的執行緒可見,是乙個全域性變數.pthread mutex initializer實際上是乙個巨集,當編譯器看到它,...
windows多執行緒互斥和同步
位址二 win 多執行緒 define thread num 10 int threadcount 0 int threadno 0 用於互斥 critical section nocritical critical section countcritical handle nomutexhandl...
多執行緒同步與互斥
1.互斥 include include include include include pthread mutex t mutex pthread mutex initializer int lock var 0 time t end time void pthread1 void arg voi...