【學習嵌入式day-25-線程】

exec函數族

exec函數族

????????利用進程空間執行另一份代碼

#include "../head.h"int main(void)
{char *parg[5] = {"./hello","how","are","you",NULL,};printf("execl-up\n");//execl("./hello", "./hello", "how", "are", "you", NULL);execv(parg[0], parg);printf("execl-error\n");printf("execl-down\n");return 0;}

主函數傳參

主函數形式

#include "../head.h"int main(int argc, const char **argv)
{int i = 0;printf("hello world\n");printf("==========\n");for(i = 0; i < argc; i++){printf("%s\n", argv[i]);}//for(i = 0; argv[i] != NULL; i++){printf("%s\n", argv[i]);}return 0;
}

system

#include "../head.h"void mysystem(void)
{pid_t pid;pid = fork();if(-1 == pid){perror("fail to fork");return;}if(0 == pid){execlp("ls", "ls", "-l", NULL);}wait(NULL); //父子進程同步return;
}int main(void)
{printf("systen-up\n");mysystem();printf("system-down\n");return 0;
}

線程

概念

  • 線程是一個輕量級的進程
    • 線程本質就是一個進程
    • 線程和進程不完全一致,輕量指的是內存空間,進程空間和線程空間管理方法不同

進程和線程區別

  • 線程本質是進程,線程是任務創建、調度、回收的過程
  • 進程空間:文本段、數據段、系統數據段共同構成
  • 線程空間:
    • 線程必須位于進程內部,沒有進程,線程無法獨立存在
    • 一個進程中的所有線程共享文本段+數據段+堆區,獨享棧區
    • 線程獨享的棧區默認8M
    • 一個進程中的多個線程切換調度任務時,資源開銷比較小

  • 區別總結:

    • 線程是CPU任務調度的最小單元,和進程一樣都是獨立執行的任務
    • 進程是操作系統資源分配的最小單元,線程無法獨立存在,不是一個獨立的空間,只是任務的獨立。

多進程和多線程的優缺點

多線程和多進程對比

線程的調度

  • 與進程調度保持一致
  • 宏觀并行,微觀串行

線程的消亡

  • 線程結束需要回收線程空間,否則產生僵尸線程

線程的函數接口

函數接口

pthread_create(創建線程)

pthread_self(獲得線程的ID號)

pthread_exit(結束線程任務)

pthread_join(回收線程空間)

#include "../head.h"void *thread1(void *arg)
{printf("線程1(TID:%#lx)開始執行\n", pthread_self());pthread_exit("線程1退出");return NULL;
}
void *thread2(void *arg)
{printf("線程2(TID:%#lx)開始執行\n", pthread_self());pthread_exit("線程2退出");return NULL;
}
void *thread3(void *arg)
{printf("線程3(TID:%#lx)開始執行\n", pthread_self());pthread_exit("線程3退出");return NULL;
}int main(void)
{pthread_t tid[3];int i = 0;void *pret = NULL;void *(*p[3])(void *) = {thread1, thread2, thread3};    //函數指針數組for(i = 0; i < 3; i++){pthread_create(&tid[i], NULL, p[i], NULL);}for(i = 0; i < 3; i++){pthread_join(tid[i], &pret);    //回收狀態傳&pret,不回收狀態直接傳NULLprintf("線程退出狀態:%s\n", (char *)pret);}/*int ret = 0;pthread_t tid1;pthread_t tid2;pthread_t tid3;*//*ret = pthread_create(&tid1, NULL, thread1, NULL);if(ret != 0){perror("fail to pthread_create");return -1;}printf("線程1(TID:%#lx)創建成功\n", tid1);ret = pthread_create(&tid2, NULL, thread2, NULL);if(ret != 0){perror("fail to pthread_create\n");return -1;}printf("線程2(TID:%#lx)創建成功\n", tid2);ret = pthread_create(&tid3, NULL, thread3, NULL);if(ret != 0){perror("fail to pthread_create\n");return -1;}printf("線程3(TID:%#lx)創建成功\n", tid3);pthread_join(tid1, NULL);pthread_join(tid2, NULL);pthread_join(tid3, NULL);*/return 0;
}

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/918858.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/918858.shtml
英文地址,請注明出處:http://en.pswp.cn/news/918858.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Rust 中 Box 的深度解析:作用、原理與最佳實踐

Rust 中 Box 的深度解析&#xff1a;作用、原理與最佳實踐 Box 是 Rust 中最基礎且最重要的智能指針類型&#xff0c;它在 Rust 的內存管理和所有權系統中扮演著核心角色。以下是關于 Box 的全面解析&#xff1a; Box 的核心作用 #mermaid-svg-m6liFZlmqOHRfIZB {font-family:&…

【測試用例】

需求背景部分金融/政企等行業客戶&#xff0c;企業內部安全要求較高&#xff0c;且因為某些原因未接入 sso 登錄&#xff0c;會要求 MG 提供較為復雜的密碼規則甚至提供強更機制&#xff1b;且每個客戶的安全要求不一樣目前 MG 線上密碼規則&#xff1a; 8 位以上&#xff0c;包…

Klipper-probe模塊

配置信息[probe] pin: !PD4 x_offset: 0 y_offset: 0 z_offset: -0.20 #the distance between nozzle and level switch speed: 10 samples: 2 #probe one point three times get an average samples_result: average sample_retract_dist: 5 samples_tolerance: 0.05 # …

Excel多級數據結構導入導出工具

Excel多級數據結構導入導出工具 這是一個功能強大的Excel導入導出工具庫&#xff0c;專門用于處理復雜的多級嵌套數據結構。通過自定義注解配置&#xff0c;可以輕松實現Java對象與Excel文件之間的雙向轉換。 核心功能特性 1. 多級數據結構支持 嵌套對象處理: 支持任意層級的對…

基于UniApp的新大陸物聯網平臺溫濕度檢測系統開發方案

新大陸物聯網平臺對接要點 認證方式&#xff1a; 使用AccessToken進行API認證 Token存儲在本地緩存中 數據格式&#xff1a; 溫度數據單位&#xff1a;攝氏度(C) 濕度數據單位&#xff1a;百分比(%) 時間格式&#xff1a;ISO 8601或時間戳 設備狀態&#xff1a; online:…

Git、JSON、MQTT

GIT簡介&#xff1a;Git是什么&#xff1f;Git是目前世界上最先進的分布式版本控制系統作用&#xff1a;版本控制&#xff08;版本的備份--->版本的回溯和前進&#xff09;多人協作優勢&#xff1a;SVN(集中式)劣勢&#xff1a;過度依賴服務器和網絡&#xff0c;容災性差Git…

yolo目標檢測技術之yolov11項目實戰(三)

yolo目標檢測技術之yolov11項目實戰&#xff08;三&#xff09; 文章目錄yolo目標檢測技術之yolov11項目實戰&#xff08;三&#xff09;一、 基于 YOLO11 的火焰與煙霧檢測系統&#xff08;實戰代碼&#xff09;項目目標環境搭建創建虛擬環境安裝依賴1.1 數據集準備1. 下載地址…

CF思維小訓練(二)

清晰的繽紛的都可以 臟兮兮的甜的也都有轉機 不想太小心 錯過第一百零一場美麗 CF思維小訓練&#xff08;二&#xff09; 書接上回CF思維小訓練-CSDN博客 雖然代碼很短&#xff0c;都是每一道題的背后都思維滿滿&#xff1b; 目錄CF思維小訓練&#xff08;二&#xff09;Arbo…

分布式鎖:從理論到實戰的深度指南

1. 分布式鎖是啥&#xff1f;為什么它比單機鎖更“硬核”&#xff1f;分布式鎖&#xff0c;聽起來高大上&#xff0c;其實核心問題很簡單&#xff1a;在多個機器、進程或服務同時搶奪資源時&#xff0c;怎么保證不打架&#xff1f; 想象一下&#xff0c;你在雙十一搶購限量款球…

基于UniApp的智能在線客服系統前端設計與實現

了解更多&#xff0c;搜索“程序員老狼”一、引言在當今數字化時代&#xff0c;客戶服務已成為企業競爭力的重要組成部分。本文將詳細介紹一款基于UniApp框架開發的跨平臺智能客服系統前端實現方案&#xff0c;該系統不僅具備傳統客服功能&#xff0c;還融入了現代即時通訊和人…

react與vue的對比,來實現標簽內部類似v-for循環,v-if等功能

前言&#xff1a;在vue中我們提供了很多標簽方法&#xff0c;比如用的比較多的v-for循環內容&#xff0c;v-if/v-show等判斷&#xff0c;可以直接寫在標簽中&#xff0c;大大提高了我們的開發效率&#xff0c;那么在react中有沒有類似的方法呢&#xff1f;我們這里來說一說。re…

PCB工藝-四層板制作流程(簡單了解下)

一&#xff09;流程&#xff1a;四層板的內層芯板&#xff0c;是由一張雙面覆銅板PP*2銅箔*2覆銅板蝕刻好線路&#xff0c;就是我們的芯板了PP全名叫半固化片&#xff0c;主體是玻璃纖維布環氧樹脂&#xff0c;是絕緣介質銅箔片&#xff0c;是單獨一張銅箔&#xff0c;很薄&…

無人機三維路徑規劃

文章目錄 1、引言 2、背景知識 3、核心算法 4、挑戰與優化 5、初始效果 6、需要改進地方 7、水平方向優化路線 8、垂直方向優化路線 9、與經過路線相交的網格都繪制出來 1、引言 介紹三維路徑規劃的定義和重要性:在無人機、機器人導航、虛擬現實等領域的應用。 概述文章目標和…

Spring-解決項目依賴異常問題

一.檢查項目的Maven路徑是否正確在確保新項目中的依賴在自己的電腦中已經存在的情況下&#xff1a;可以檢查項目的Maven路徑是否正確在拿到一個新項目時&#xff0c;要檢查這個項目的Maven路徑是自己電腦上設置好的Maven路徑嗎&#xff1f;如果不是&#xff0c;項目依賴會出問題…

系統設計——DDD領域模型驅動實踐

摘要本文主要介紹了DDD&#xff08;領域驅動設計&#xff09;在系統設計中的實踐應用&#xff0c;包括其在編碼規范、分層架構設計等方面的具體要求和建議。重點強調了應用層的命名規范&#xff0c;如避免使用模糊的Handler、Processor等命名&#xff0c;推薦使用動詞加業務動作…

開源衛星軟件平臺LibreCube技術深度解析

LibreCube技術深度解析&#xff1a;開源衛星軟件平臺的完整指南 LibreCube是一個專為CubeSat設計的模塊化開源衛星軟件平臺&#xff0c;它通過整合姿態控制、通信管理和任務調度等核心功能&#xff0c;為立方星開發者提供了完整的解決方案。本文將全面剖析LibreCube的技術架構…

React(四):事件總線、setState的細節、PureComponent、ref

React(四) 一、事件總線 二、關于setState的原理 1. setState的三種使用方式 (1)基本使用 (2)傳入一個回調 (3)第一個參數是對象,第二個參數是回調 2. 為什么setState要設置成異步 (1)提升性能,減少render次數 (2)避免state和props數據不同步 3. 獲取異步修改完數…

CPUcores-【硬核優化】CPU增強解鎖全部內核!可優化游戲性能、提升幀數!啟用CPU全內核+超線程,以更高優先級運行游戲!支持各種游戲和應用優化~

軟件介紹&#xff08;文末獲取&#xff09;CPUCores&#xff1a;游戲性能優化利器?這款工具&#xff0c;專為優化提升中低配電腦的幀數而生。其獨創的CPU資源調度技術&#xff0c;能讓老舊硬件煥發新生核心技術原理?采用「內核級隔離」方案&#xff0c;通過&#xff1a;系統進…

HQA-Attack: Toward High Quality Black-Box Hard-Label Adversarial Attack on Text

文本對抗性攻擊分為白盒攻擊和黑盒攻擊&#xff0c;其中黑盒攻擊更貼近現實&#xff0c;又可分為軟標簽和硬標簽設置&#xff0c;。這些名詞分別是什么意思 在文本對抗性攻擊中&#xff0c;“白盒攻擊”“黑盒攻擊”以及黑盒攻擊下的“軟標簽”“硬標簽”設置&#xff0c;核心差…

PyCharm性能優化與大型項目管理指南

1. PyCharm性能深度調優 1.1 內存與JVM配置優化 PyCharm基于JVM運行,合理配置JVM參數可顯著提升性能: # 自定義VM選項文件位置 # Windows: %USERPROFILE%\AppData\Roaming\JetBrains\<product><version>\pycharm64.exe.vmoptions # macOS: ~/Library/Applicat…