CentOS8搭建FTP伺服器
阿新 • • 發佈:2022-02-23
什麼是執行緒
注意:
ps -Lf (程序名字)可以檢視程序的執行緒
Linux核心實現執行緒的原理
首先先介紹一下三級頁表:
執行緒建立
注意編譯和連結的使用使用 -pthread表示引入執行緒庫
/************************************************************************* > File Name: pthread_test.c > Author: shaozheming > Mail: [email protected] > Created Time: 2022年03月02日 星期三 12時09分06秒 ************************************************************************/ #include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> #include <pthread.h> void sys_err(const char *str) { perror(str); exit(1); } void *func(void *args) { int i = (int)args; printf("I'm %d thread. threadpid: %d, tid: %lu\r\n", i, getpid(), pthread_self()); return NULL; } int main(int argc, char* argv[]) { int i; pthread_t tid; printf("mainpid: %d, tid: %lu\r\n", getpid(), pthread_self()); for(i = 0; i < 5; ++i){ /* 四個引數分別是執行緒id,執行緒屬性,回撥函式和回撥函式引數 */ int ret = pthread_create(&tid, NULL, func, (void *)i); if(ret < 0){ sys_err("pthread create error!\r\n"); } } sleep(1); return 0; }
如果傳遞地址,相當於間接引用,執行緒訪問main執行緒的棧地址,如果main中i變化,原來i的執行緒也會變
執行緒間共享全域性變數
pthread_exit函式
pthread_join函式
回收值是整型,最後就得是整型指標,void* 對應的就是void**
注意第二個引數是執行緒函式的返回值
pthread_detach
執行緒中的檢查出錯
pthread_cancel
可以殺死程序,需要進入核心,如果執行緒只有一個while迴圈,即沒有系統呼叫,說明進不了核心,就殺死不了
程序執行緒控制原語比對
執行緒屬性
Linux核心2.2版本的屬性