Linux多執行緒及執行緒同步簡單例項

2022-08-15 19:24:13 字數 1572 閱讀 4496

一、多執行緒基本概念

1. 執行緒的基本概念

① 執行緒就是輕量級的程序

②執行緒和建立他的程序共享**段、資料段

③執行緒擁有自己的棧

2. 在實際應用中,多個執行緒往往會訪問同一資料或資源,為避免執行緒之間相互影響,需要引入互斥機制,而互斥鎖(mutex)是互斥機制中的一種

3. 簡單例項

#include #include 

pthread_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 #include 

pthread_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 構造乙...