執行緒同步(多執行緒協同使用有限資源)

2021-08-07 19:15:08 字數 1167 閱讀 5567

1)互斥量(mutex)

全域性變數:pthread_mutex_t m;//定義互斥量

主函式: pthread_mutex_init(&m,null);//初始化

……操作…… //預設配置null

pthread_mutex_destory(&m);//登出

執行緒函式:

pthread_mutex_lock(&m);//加鎖

pthread_mutex_unlock(&m);//解鎖

2)訊號量(semphore):乙個特殊的整形變數,支援p v操作,如果訊號量的當前值為0,p操作會阻塞當前執行緒的執行

全域性變數:sem_t s;//定義訊號量

主函式:int sem_init(sem_t *sem, int pshared, unsigned int value);//初始化

//0錶可在不同程序間共享//n個廁所

int sem_destroy(sem_t *sem);//登出

執行緒函式:

sem_wait(&m); //p操作,訊號量加1,如果已經為0依然操作,會阻塞執行緒,直到不為0

sem_post(&m); //v操作,訊號量減1

實現**:

#include 

#include

#include

#include

#include

#define n 5

//加了關鍵字,作業系統不會把它調到暫存器中,一直在記憶體中

volatile

int empty_flag=2;//被頻繁的訪問的量,系統會自動調到暫存器中用

pthread_mutex_t m;//互斥量

sem_t n;

void* ptr_fun(void* arg);

int main()

}for(i=0;i// pthread_mutex_destroy(&m);//登出互斥量

sem_destroy(&n);

return0;}

/*******5個人五個廁所

void* ptr_fun(void* arg)

*///5個人兩個廁所

void* ptr_fun(void* arg)

多執行緒同步

synchronized 物件 其中物件相當於乙個標誌 鎖 用於判斷 同步 塊 同步的前提必須是兩個或兩個以上的執行緒,且共用同乙個鎖 同步解決了多執行緒的安全問題 弊端 多執行緒需要判斷鎖,消耗了資源 同步函式 將synchronized放在函式名前面即可 即具有同步性質 使用的鎖是this 靜態...

多執行緒同步

同步 即限制某個資源在同一時間只能被同乙個執行緒訪問。執行緒安全問題 多個執行緒共同處理共享資源所導致的。解決 多執行緒處理乙個共享資源時,將處理共享資源的 利用關鍵字synchronized修飾。同步 塊 synchronized修飾 塊,synchronized lock 同步方法 synchr...

多執行緒同步

子執行緒迴圈10次,接著主線程迴圈100,接著又回到子執行緒迴圈10次,接著再回到主線程又迴圈100,如此迴圈50次,請寫出程式 package com.itcast public class traditionthreadcommuncation start 子執行緒 for int j 1 j ...