Linux C 多執行緒的同步和互斥

2021-07-24 06:45:56 字數 2145 閱讀 4412

一、互斥鎖的定義,初始化,互斥操作的實現機制?

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...