linux c學習之執行緒控制

2021-06-23 01:09:57 字數 1827 閱讀 4940

這一周前兩天把執行緒控制看完了,在這裡總結一下我的易錯點以及需要注意的點。

1、程序跟執行緒的關係:在我看來單一程序就是乙個大的執行緒,但是如果程序中建立了多個執行緒之後,它就成了父執行緒,如果父執行緒結束,那麼子執行緒也就結束了。這點跟子程序不同。

2、多個子執行緒是共用程序的儲存空間,不像子程序一樣,是自己申請乙個儲存空間。

3、pthread_creat函式,原形是

intpthread_create(pthread_t *thread,constpthread_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...