一、多執行緒基本概念
1. 執行緒的基本概念
① 執行緒就是輕量級的程序
②執行緒和建立他的程序共享**段、資料段
③執行緒擁有自己的棧
2. 在實際應用中,多個執行緒往往會訪問同一資料或資源,為避免執行緒之間相互影響,需要引入互斥機制,而互斥鎖(mutex)是互斥機制中的一種
3. 簡單例項
#include #includepthread_t work1id;
pthread_t work2id;
int work1ret = 1
;int work2ret = 2
;pthread_mutex_t mutex;
int number = 0
;void* work1(void*args)
return &work1ret;
}void* work2(void*args)
return &work2ret;
}int
main()
pthread_join(work2id, &work2ret);
if(work2ret !=null)
return0;
}
二、執行緒同步
1. 多個執行緒按照規定的順序來執行,即為執行緒同步。
2. 條件變數
①初始化
pthread_cond_t cond_ready = pthread_cond_initializer;
②等待條件成熟
pthread_wait(&cond_ready, &mutex); //會對mutex先進行解鎖操作
③設定成熟條件
pthread_cond_signal(&cond_ready)
3. 簡單例項
#include #includepthread_t work1id;
pthread_t work2id;
int work1ret = 1
;int work2ret = 2
;pthread_cond_t cond_ready =pthread_cond_initializer;
pthread_mutex_t mutex =pthread_mutex_initializer;
int number = 0
;void* work1(void*args)
pthread_mutex_unlock(&mutex);
printf(
"i am work%d, number = %d\n
", *((int*)args), number);
sleep(1);
}return &work1ret;
}void* work2(void*args)
return &work2ret;
}int
main()
pthread_join(work2id, &work2ret);
if(work2ret !=null)
return0;
}
Linux多執行緒,執行緒同步
5 執行緒私有資料 程序內的所有執行緒共享程序的資料空間,因此全域性變數為所有執行緒所共有。但有時執行緒也需要儲存自己的私有資料,這時可以建立執行緒私有資料 thread specific date tsd 來解決。例如我們常見的變數 errno 它返回標準的出錯資訊。它顯然不能是乙個區域性變數,幾...
Linux多執行緒 執行緒同步
執行緒同步的概念 即當有乙個執行緒在對記憶體進行操作時,其他執行緒都不可以對這個記憶體位址進行操作,直到該執行緒完成操作,其他執行緒才能對該記憶體位址進行操作,而其他執行緒又處於等待狀態。在一般情況下,建立乙個執行緒是不能提高程式的執行效率的,所以要建立多個執行緒。但是多個執行緒同時執行的時候可能呼...
VC MFC 多執行緒及執行緒同步
自動事件 cevent類的建構函式,第二個引數為false,是自動事件,自動事件在呼叫setevent函式被使用後能夠自動恢復為無訊號狀態。預設情況下,是自動事件。1 宣告事件為全域性物件。包含使用執行緒同步物件所需要的標頭檔案 include afxmt.h cevent eventobj 構造乙...