12.线程(二)

一.上集回顾

建议先学上篇博客,再向下学习,上篇博客的链接如下:

https://blog.csdn.net/weixin_60668256/article/details/154519900?fromshare=blogdetail&sharetype=blogdetail&sharerId=154519900&sharerefer=PC&sharesource=weixin_60668256&sharefrom=from_link

二.多级页表

1.多级页表的讲解

然后从MMU里面出来的就是物理地址

硬件快,所以要硬件自动完成

也就是说,我们有一个创建一个轻量级线程,只要给这个线程一个函数的入口地址就可以了

2.补充TLB缓存

重复的访问,就可以进行优化,减少时间消耗

直接执行中断逻辑(默认处理方法),然后将其处理即可

三.线程的优点

线程创建的个数一般都等于CPU个数*核数

线程的优势是前三点

TLB缓冲的是虚拟到物理地址的映射,cache缓存的是代码和数据块(进程间切换,前面都会失效,但是线程间切换不会失效)

四.线程的缺点

五.线程异常

六.线程用途

七.线程vs进程

1.进程和线程

2.进程的多个线程共享

八.线程控制

1.POSIX线程库

2.创建线程

cpp 复制代码
#include <iostream>
#include <string>
#include <cstdio>
#include <cstring>
#include <unistd.h>
#include <pthread.h>

void* routine(void* args)
{
    std::string name = static_cast<const char*>(args);
    while(true)
    {
        std::cout << "我们是新线程,我的名字是: " << name << std::endl;
        sleep(1);
    }
    return 0;
}

int main()
{
    pthread_t tid;
    int n = pthread_create(&tid,nullptr,routine,(void*)"thread-1");
    if(n != 0)
    {
        std::cout << "create thread error: " << strerror(n) << std::endl;
        return 1;
    }
    while(true)
    {
        std::cout << "我们是主线程..." << std::endl;
        sleep(1);
    }
    return 0;
}
cpp 复制代码
"makefile"

mythread:mythread.cc
	g++ -o $@ $^ -std=c++11 -lpthread
.PHONY:clean
clean:
	rm -rf mythread

pthread库属于第三方库,我们要加对应的-l选项

cpp 复制代码
#include <iostream>
#include <string>
#include <cstdio>
#include <cstring>
#include <unistd.h>
#include <pthread.h>
#include <thread>



int main()
{
    std::thread t([](){
        while(true)
        {
            std::cout << "我们是新线程,我的名字是: new thread" << std::endl;
            sleep(1);
        }
    });
    while(true)
    {
        std::cout << "我们是main线程..." << std::endl;
        sleep(1);
    }
    return 0;
}
相关推荐
晨非辰3 分钟前
C++ 波澜壮阔 40 年:从基础I/O到函数重载与引用的完整构建
运维·c++·人工智能·后端·python·深度学习·c++40周年
虚伪的空想家2 小时前
KVM的ubuntu虚机如何关闭安全启动
linux·安全·ubuntu
艾莉丝努力练剑3 小时前
【C++:C++11】C++11新特性深度解析:从可变参数模板到Lambda表达式
c++·stl·c++11·lambda·可变模版参数
同学小张5 小时前
【端侧AI 与 C++】1. llama.cpp源码编译与本地运行
开发语言·c++·aigc·llama·agi·ai-native
踢球的打工仔6 小时前
PHP面向对象(7)
android·开发语言·php
t198751288 小时前
在Ubuntu 22.04系统上安装libimobiledevice
linux·运维·ubuntu
skywalk81638 小时前
linux安装Code Server 以便Comate IDE和CodeBuddy等都可以远程连上来
linux·运维·服务器·vscode·comate
汤姆yu8 小时前
基于python的外卖配送及数据分析系统
开发语言·python·外卖分析
Yue丶越8 小时前
【C语言】字符函数和字符串函数
c语言·开发语言·算法
晚风吹人醒.9 小时前
缓存中间件Redis安装及功能演示、企业案例
linux·数据库·redis·ubuntu·缓存·中间件