Pthread:
POSIX執行緒(POSIX Threads,常被縮寫為Pthreads)是POSIX的執行緒標準,定義了創建和操縱執行緒的一套API。
Pthreads定義了一套C語言的類型、函數與常量,它以pthread.h頭文件和一個執行緒庫實現。
pthread可以分為四類:
執行緒管理:例如創建執行緒,等待(join)執行緒,查詢執行緒狀態等。
互斥鎖(Mutex):創建、摧毀、鎖定、解鎖、設置屬性等操作。
條件變量(Condition Variable):創建、摧毀、等待、通知、設置與查詢屬性等操作
使用了互斥鎖的執行緒間的同步管理。
POSIX的Semaphore API可以和Pthreads協同工作,但這並不是Pthreads的標準。因而這部分API是以"sem_"打頭,而非"pthread_"。
而最基本的就是 Pthread 的管理,先從這個部分來做初學會比較容易理解。
Pthread 管理API(較常用):
pthread_create
int pthread_create(pthread_t *tid , const pthread_attr_t *attr , void *(*function)(void *) , void *argument)
這個Function的作用是用來產生一個Thread並執行附帶的Function,附帶有4個參數。
參數1. pthread_t *tid為pthread的指標,在使用Thread之前必須要先宣告一個pthread_t的變數。參數2. const pthread_attr_t *attr為該Thread的屬性,預設是NULL,如果沒有其他特殊的需求直接填入NULL即可。
參數3. void *(*function)(void *)為Function pointer,這邊要放入你要執行的Function。
參數4. void *argument為Function pointer所要帶的參數。
回傳值: 如果執行成功則回傳0,如果執行失敗則回傳錯誤代碼。
example: pthread_create( &thread1, NULL , showmessage , message);
pthread_exit
void pthread_exit (void *value_ptr)
這個Function的作用是用來關閉一個Thread,附帶有1個參數。
參數1: void *value_ptr用來設定執行成功時該Thread會回傳的值,這個值可由pthread_join()這個Function來取得。
回傳值: 不會回傳任何值。
example: pthread_exit(NULL);
pthread_cancel
int pthread_cancel (pthread_t thread)
這個Function的作用是用來關閉一個指定的Thread,附帶有一個參數。
參數1: pthread_t thread為要關閉的Thread。
回傳值: 如果執行成功則回傳0,如果執行失敗則回傳錯誤代碼。
example: pthread_cancel(thread1);
pthread_join
int pthread_join (pthread_t thread, void **value_ptr)
這個Function的作用會暫停目前執行pthread_join的Thread,等到目標Thread執行完畢之後目前執行pthread_join的Thread才會繼續執行,附帶有2個參數。
參數1: pthread_t thread為要等待的目標Thread。
參數2: void **value_ptr用來取得目標Thread的回傳值。
回傳值: 如果執行成功則回傳0,如果執行失敗則回傳錯誤代碼。
可以從example 1的範例中來觀察如何創造管理pthread 實作上面提到的API。
example 1
#include <stdio.h>
#include <pthread.h>
void *show_message( void *ptr )
{
char *message;
message = (char *) ptr;
int x = 5;
for(x = 5 ; x > 0 ; --x){
printf("%s \n", message);
_sleep(300);
}
pthread_exit((void *)1234);
}
int main(){
pthread_t thread1;
char *message1 = "Thread 1";
void *ret;
pthread_create(&thread1, NULL , show_message , (void*) message1);
pthread_join( thread1, &ret);
printf("return value from thread1 = %d\n",ret);
system("pause");
return 0;
}
******************************************************************************
output:
Thread 1
Thread 1
Thread 1
Thread 1
Thread 1
return value from thread1 = 1234
reference:wiki-pthread、nikoung的網路日誌
訂閱:
張貼留言 (Atom)
linux - IPC (inter-processes communication) Shered mempry(共用記憶體)
IPC (inter-processes communication) 顧名思義,processes 之間溝通的管道&機制。 Shared memory 程式間可以共享memory Message Queue 程式間傳送資訊最簡單的方法 Semaphore...
-
Volatile 宣告變數 Volatile(揮發) 顧名思義揮發性的變數宣告。 在了解Volatile 之前必須先搞懂一件事,就是processes中變數的處理方式,簡單來說當program 中宣告,當宣告一個變數後此變數會暫存在CPU 的cache中,以方便快速的運...
-
Pthread: POSIX執行緒(POSIX Threads,常被縮寫為Pthreads)是POSIX的執行緒標準,定義了創建和操縱執行緒的一套API。 Pthreads定義了一套C語言的類型、函數與常量,它以pthread.h頭文件和一個執行緒庫實現。 pthread...
-
在之前的blog ( thread & process )中有稍微提到thread一些要注意的事項,而Mutex 就是可以有效的解決thread 同步的問題。 簡單來說 thread 最常遇到的問題就是共用資源分配的問題,當你設計multi-threads時有特別是利用...
沒有留言:
張貼留言