這一周前兩天把執行緒控制看完了,在這裡總結一下我的易錯點以及需要注意的點。1、程序跟執行緒的關係:在我看來單一程序就是乙個大的執行緒,但是如果程序中建立了多個執行緒之後,它就成了父執行緒,如果父執行緒結束,那麼子執行緒也就結束了。這點跟子程序不同。
2、多個子執行緒是共用程序的儲存空間,不像子程序一樣,是自己申請乙個儲存空間。
3、pthread_creat函式,原形是
int
pthread_create(pthread_t *
thread
,
const
pthread_attr_t *attr,
void
*(*start_routine) (
void
*),
void
*arg);
這個函式的原形打眼看很不好理解,說一下四個引數分別代表的含義:
第乙個引數:指向執行緒識別符號的指標。第二個引數:用來設定執行緒屬性。
第三個引數:是執行函式的起始位置。第四個引數:即將執行函式的引數。
第三個引數是乙個整體,表示乙個函式:貼乙個例子:
標記的地方可以跟第三個引數比較一下,其實第三個引數就是代表了被調函式的命名原形。#include #include #include #include #include #include int * thread(void * arg) //看這裡
int main(int argc, char *argv)
sleep(1);
return exit_success;
}
5、pthread_t :
定義:typedef unsigned long int pthread_t;
用途:pthread_t 用於宣告執行緒id。sizeof(pthread_t) = 4;
跟pthread_attr_t區別開,pthread_t是用來設定執行緒屬性的。
6、pthread_attr_t:
定義;typedef struct pthread_addr_t;
7、pthread_addr_t 設定為pthread_create_detached,則新執行緒不能用pthread_join()來同步,且在退出時候自行釋放所占用的資源。
8、pthread_cleanup_push()跟pthread_cleanup_pop()是一組的,所以要同時出現。貼一段**:
#include #include #include #include #include #include pthread_mutex_t mutex;
pthread_cond_t cond;
void * thread1(void * arg)
pthread_cleanup_pop(0);
}void * thread2(void * arg)
}int main(int argc, char *argv)
while(1);
sleep(50);
pthread_exit(0);
return exit_success;
}
9、互斥鎖可以單獨使用,避免了多執行緒對同一檔案的寫入操作。但環境變數需要配合互斥鎖一起使用。
Linux C 程序控制
1.程式 程序 程序id pit t型別。2.get pid 取得程序idgetppid 取得父程序id。a getuid geteuid getgid getegid 取得使用者id及組id。3.fork函式建立新的程序。pid tfork void a fork函式不需要引數。b 對於父程序fo...
Linux c 程序控制
getpid獲得程序識別碼 表頭檔案 include函式原型 pid t getpid void 返回值 目前程序的程序識別碼 getppid獲得父程序的程序識別碼 表頭檔案 include函式原型 pid t getppid void 返回值 目前程序的父程序識別碼 fork建立子程序 表頭檔案 ...
Linux之執行緒控制
執行緒控制 由於執行緒是後來才引用進來的,因此,在編譯鏈結時需要加 lpthread來引入外部庫 posix 建立執行緒 include 函式原型 int pthread create pthread t thread,const pthread attr t attr,void start rou...