中文亚洲精品无码_熟女乱子伦免费_人人超碰人人爱国产_亚洲熟妇女综合网

當前位置: 首頁 > news >正文

無錫做公司網(wǎng)站的網(wǎng)絡搜索詞排名

無錫做公司網(wǎng)站的,網(wǎng)絡搜索詞排名,個舊網(wǎng)站建設,班級網(wǎng)站建設畢業(yè)論文🐶博主主頁:??. 一懷明月? ???🔥專欄系列:線性代數(shù),C初學者入門訓練,題解C,C的使用文章,「初學」C,linux 🔥座右銘:“不要等到什么都沒有了…

🐶博主主頁:@??. 一懷明月??

???🔥專欄系列:線性代數(shù),C初學者入門訓練,題解C,C的使用文章,「初學」C++,linux

🔥座右銘:“不要等到什么都沒有了,才下定決心去做”

🚀🚀🚀大家覺不錯的話,就懇求大家點點關注,點點小愛心,指點指點🚀🚀🚀

目錄

線程

線程控制?

pthread_create創(chuàng)建線程

pthread_self

pthread_join

Pthread_exit

pthread_detach

pthread_cancel

系統(tǒng)庫調用問題

線程的局部存儲


線程

重談一次地址空間-虛擬到物理的過程

文件系統(tǒng)IO的基本單位大小:4kb

內存以4GB為例,就有1048576個頁框(4kb)

struct page

{

????int flag;//用于表示該頁的狀態(tài)和屬性

????//描述一個page的使用情況

????//頁框的屬性

}

為了對所有的頁框進行管理,所以需要一個struct page pages[1048576]的數(shù)組

線程劃分頁表的本質:劃分地址空間

Int a=100

根據(jù)a的虛擬地址,找到a的物理地址,a是一個整形變量,偏移量就位4

在進程視角:虛擬地址本身就是資源!

線程共享進程數(shù)據(jù),但也擁有自己的一部分數(shù)據(jù):

線程ID
一組寄存器(每個線程有自己的獨立上下文數(shù)據(jù))
棧
errno
信號屏蔽字
調度優(yōu)先級

線程控制?

pthread_create創(chuàng)建線程

int pthread_create(pthread_t *thread, const pthread_attr_t *attr,void *(*start_routine) (void *), void *arg);
這個函數(shù)的參數(shù)包括:* thread:指向 pthread_t 類型的指針,用于存儲新創(chuàng)建線程的標識符。
* attr:指向 pthread_attr_t 類型的指針,用于設置新線程的屬性,通常可以設為 NULL 表示使用默認屬性。
* start_routine:指向一個函數(shù)的指針,該函數(shù)定義了新線程要執(zhí)行的任務。它的簽名為 void* func(void*)。
* arg:傳遞給 start_routine 函數(shù)的參數(shù)。//對象/結構體

linux下有沒有真正的線程?

沒有。只有輕量級進程的概念,所以linux os只會提供輕量級進程創(chuàng)建的系統(tǒng)調用,不會直接提供線程創(chuàng)建接口

所以需要一個庫pthread,這個庫不屬于c/c++,這個庫是操作系統(tǒng)自帶的,編譯時鏈接我們的庫

function<void()>?是 C++11 中引入的函數(shù)對象,它可以用來表示一個沒有參數(shù)且沒有返回值的函數(shù)。在 C++ 中,函數(shù)對象是可調用的實體,類似于函數(shù)指針,但具有更大的靈活性和功能。

事例

#include <iostream>
#include <pthread.h>
#include <string>
#include <unistd.h>
#include <functional>
#include <time.h>
#include <vector>using namespace std;const int threadnum = 5;
using func_t = function<void()>;class threaddata
{
public:
threaddata(const string &name, const uint64_t &time, func_t f): threadname(name), createtime(time), func(f){
}public:
string threadname;uint64_t createtime;func_t func;};void print(){
cout << "我是線程執(zhí)行的大任務的一部分" << endl;}// 新線程
void *ThreadRountine(void *args){
threaddata *td = static_cast<threaddata *>(args); // 安全強轉threaddata*類型while (true){
cout << "new thread"<< " thread name:" << td->threadname << " thread time:" << td->createtime << endl;td->func();
sleep(1);//測試一個線程異常,整個進程就結束了
// int a=10;
// if(td->threadname=="thread-4")
// {
// cout<<"觸發(fā)異常"<<endl;
// a/=0;
// }
}
}// 如何給新線程傳參,如何創(chuàng)建多線程呢
// 獲取返回值// 主線程
int main(){
vector<pthread_t> pthreads;for (int i = 0; i < threadnum; i++){
char pthreadname[64];snprintf(pthreadname, sizeof(pthreadname), "%s-%lu", "thread", i);pthread_t tid;threaddata *td = new threaddata(pthreadname, (uint64_t)time(nullptr), print);pthread_create(&tid, nullptr, ThreadRountine, td);pthreads.push_back(tid);
sleep(1);
}while (true){
cout << "main thread" << endl;sleep(3);
}
return 0;}

pthread_self

在Linux中,pthread_self 函數(shù)用于獲取當前線程的線程ID(pthread_t)。

它的聲明如下:

#include <pthread.h>pthread_t pthread_self(void);

調用 pthread_self 函數(shù)將返回當前線程的線程ID,即 pthread_t 類型的值。線程ID 是一個唯一標識符,用于區(qū)分不同的線程。通常情況下,你可以將線程ID存儲在變量中以供后續(xù)使用。

線程終止

1. 新線程函數(shù)return。這種方法對主線程不適用,從main函數(shù)return相當于調用exit。

2. 線程可以調用pthread_exit終止自己。

3. 一個線程可以調用pthread_cancel終止同一進程中的另一個線程。

線程默認要被等待

1.線程退出,沒有等待,會導致類似進程的僵尸問題

2.線程退出時,主線程如何獲取新線程的返回值!

pthread_join

pthread_join 是 POSIX 線程庫中的函數(shù),用于等待指定的線程結束執(zhí)行。它會阻塞當前線程,直到指定的線程完成為止。

int pthread_join(pthread_t thread, void **retval);
* thread:要等待的線程的線程 ID。
* retval:指向指針的指針,用于接收被等待線程的返回值(如果有)。

事例

#include <stdio.h>
#include <pthread.h>
void* threadFunction(void* arg) {printf("Inside the new thread\n");return (void*)42;
}
int main() {pthread_t thread;pthread_create(&thread, NULL, threadFunction, NULL); // 創(chuàng)建一個新線程// 等待新線程結束void* result;pthread_join(thread, &result);printf("New thread returned: %ld\n", (long)result);return 0;
}
在這個示例中,我們創(chuàng)建了一個新線程,并在主線程中調用 
pthread_join 來等待新線程結束。pthread_join 函數(shù)會將主線程阻塞直到新線程執(zhí)行結束,
并且可以獲取新線程的返回值。

需要注意的是,pthread_join 函數(shù)會阻塞當前線程,直到指定的線程結束。因此,在實際使用中,需要確保調用 pthread_join 的線程不是主要的執(zhí)行線程,否則可能會導致整個程序被阻塞。

Pthread_exit

pthread_exit函數(shù)用于終止調用它的線程。當線程調用pthread_exit時,它會立即退出,而不會影響其他線程的執(zhí)行。線程在退出時可以返回一個指向線程退出狀態(tài)的指針。

例:

pthread_exit((void*)"thread_1 done");

如果線程退出出現(xiàn)異常呢?

如果線程出現(xiàn)異常,整個進程都會崩潰,所以沒必要獲取線程退出信號

線程的返回值,不一定返回的都是字符串,還可以是對象

線程沒有非阻塞等待,線程等待很極端,要么一直等,要么不等

線程默認是:線程模式joinable的(是可以被等待的)

線程是可以被設置為分離狀態(tài)的

在線程設置為分離狀態(tài)后,該線程結束時系統(tǒng)會自動釋放其所占用的資源,而不需要其他線程調用pthread_join來回收資源

pthread_detach

使用 pthread_detach 函數(shù)可以避免出現(xiàn)僵尸線程,提高系統(tǒng)效率。要使用 pthread_detach 函數(shù),首先需要創(chuàng)建線程,并在創(chuàng)建后立即使用 pthread_detach 函數(shù)將線程設置為分離狀態(tài)。

主線程可以調用pthread_detach分離新線程

新線程也可以調用pthread_detach分離自己

pthread_cancel

線程取消

Pthread_cancel(tid);

線程如果是分離的,是可以被取消的,但是不可以被等待

如果線程是被取消的,線程返回的值是-1,

全部都不是系統(tǒng)直接提供的接口,而是原生線程庫pthread(默認是os自帶的)提供的接口

linux中的線程被叫作用戶級線程

系統(tǒng)庫調用問題

線程要有獨立屬性

1)硬件上下文

2)棧:

新線程的棧,在庫維護

默認地址空間中的棧,由主線程使用

clone 是一個系統(tǒng)調用,用于創(chuàng)建一個新的進程或線程。與 fork 系統(tǒng)調用不同的是,clone 允許創(chuàng)建的新進程或線程與父進程或線程共享某些資源,如內存空間、文件描述符等,從而實現(xiàn)更靈活的進程/線程管理。

clone 的原型如下:

int clone(int (*fn)(void *), void *child_stack, int flags, void *arg, ...);

其中參數(shù)含義如下:

* fn:指向新進程/線程執(zhí)行的函數(shù)指針

* child_stack:指向新進程/線程棧的指針

* flags:用于指定創(chuàng)建新進程/線程的標志

* arg:傳遞給新進程/線程執(zhí)行函數(shù)的參數(shù)

clone 的常用標志包括:

* CLONE_VM:共享內存空間

* CLONE_FS:共享文件系統(tǒng)信息

* CLONE_FILES:共享文件描述符

* CLONE_SIGHAND:共享信號處理器

線程庫不僅要管理每個線程tcb,還要提供一些方法(pthread_create/pthread_join,pthread_cancel/pthread_self)

線程的局部存儲

在 C/C++ 中,__thread 是一種線程局部存儲(Thread-Local Storage,TLS)的實現(xiàn)方式,用于聲明線程私有變量。在使用 __thread 關鍵字聲明的變量中,每個線程都會有自己獨立的變量副本,不同線程之間互不影響。

__thread int g_val=100;//線程的局部存儲

g_val 被聲明為一個 __thread 變量,其初始值為 100。這意味著每個線程都會有一個名為 g_val 的變量,且其初始值為 100。不同線程中對 g_val 的操作都是互相獨立的,一個線程修改 g_val 的值不會影響到其他線程中 g_val 的值。

線程可以進行fork?線程可以進行exec*程序替換嗎?

可以fork,就是整個進程創(chuàng)建了一個子進程

程序替換之后,整個進程會被替換,所以建議,線程直接程序替換

??🌸🌸🌸如果大家還有不懂或者建議都可以發(fā)在評論區(qū),我們共同探討,共同學習,共同進步。謝謝大家! 🌸🌸🌸???

http://www.risenshineclean.com/news/46729.html

相關文章:

  • 網(wǎng)站開發(fā)實用技術介紹南寧一站網(wǎng)網(wǎng)絡技術有限公司
  • 上海網(wǎng)站開發(fā)建優(yōu)秀的軟文廣告案例
  • 海淀區(qū)企業(yè)網(wǎng)站建設公司網(wǎng)站設計制作
  • 北京 順義 網(wǎng)站制作培訓網(wǎng)站制作
  • 自制圖片肇慶網(wǎng)站快速排名優(yōu)化
  • wordpress映射新余seo
  • 視頻解析接口網(wǎng)站怎么做百度提交網(wǎng)站
  • 怎么自己做三個一網(wǎng)站一份完整的營銷策劃書
  • 做農(nóng)產(chǎn)品的網(wǎng)站北京優(yōu)化seo排名優(yōu)化
  • 國外銷售網(wǎng)站怎樣建設免費長尾詞挖掘工具
  • 麗水專業(yè)網(wǎng)站建設哪家好抖音seo優(yōu)化
  • wordpress.conf網(wǎng)站seo優(yōu)化免費
  • 有沒有給做淘寶網(wǎng)站的中國十大網(wǎng)站有哪些
  • 做網(wǎng)站需要什么部門批準重慶seo優(yōu)化效果好
  • 濟寧做企業(yè)網(wǎng)站濟南網(wǎng)站優(yōu)化排名推廣
  • 在哪里做網(wǎng)站比較好十大廣告投放平臺
  • 做平臺和獨立建網(wǎng)站綜合型b2b電子商務平臺網(wǎng)站
  • 免費的素材網(wǎng)站網(wǎng)站如何做關鍵詞優(yōu)化
  • 個人網(wǎng)站發(fā)布怎么做優(yōu)化大師官網(wǎng)入口
  • 網(wǎng)站建設總體方案設計下載優(yōu)化大師app
  • web前端工程師職業(yè)規(guī)劃seo推廣優(yōu)化的方法
  • 公司網(wǎng)站建設有什么好處2345網(wǎng)址導航下載
  • 網(wǎng)站建設的公司在哪找企業(yè)推廣策略
  • 做網(wǎng)站犯法嗎小廣告圖片
  • 類似網(wǎng)站的建設西安seo網(wǎng)絡優(yōu)化公司
  • 網(wǎng)站建設個人網(wǎng)站佛山網(wǎng)絡推廣哪里好
  • 網(wǎng)站備案信息傳網(wǎng)店推廣聯(lián)盟
  • wordpress 小工具 調用seo是什么崗位
  • 山東日照建設網(wǎng)站微信小程序怎么開通
  • 做藥材生意的網(wǎng)站免費下載百度app最新版本