进程,线程,函数调用

开发者福利!热门AI工具限时免费用 购周边即赠Coding Plan Lite,Claude Code、Cursor等20+工具畅享,效率翻倍! 阅读详情
1.进程
    (主进程)fork     pid_t>0
    -----------------------------------------  子进程复制父进程的数据空间,堆,栈。     
                     /  pid_t=0  (子进程)
                      /-----------------------  进程中止通过exit,_exit或main函数的return。

2.线程 (主线程)pthread_create    不等待子线程返回,和子线程并发执行程序代码
    -------------------------------------------------------------  
                      /     (子线程)运行start routine
                       /------------------------------线程通过return or pthread_exit结束      

3.函数调用   (主程序)                      (主程序)
    -------------------               -----------------------------------
                        /  (子程序)   /
                         /----------/
两个线程同时调用同一个处理函数的互斥问题 问题背景:在工作中遇到过一个问题,就是在两个线程同时调用同一个函数的时候,到底是应该在这个函数的内部什么处理上加上互斥。原因又是什么? 为了调查这个问题,我决定从以下三方面调查 1.线程函数调用 2.同一个进程中的两个线程调用同一个处理函数 3.两个不同进程中的两个线程调用同一个处理函数 1.线程函数调用 每个进程都会有自己的虚拟地址空间,同一个进程中的每个线程都会在这 阅读详情

相关推荐

操作系统八股文2|进程之间通信,线程共享和独有资源,命名管道,线程上下文切换,切换性能消耗,函数调用,寄存器状态保存,寄存器传参优化,函数调用的压栈和出栈,

线程共享的有堆,数据段,代码段、全局变量、静态变量、进程的公共数据、进程打开的文件描述符、信号、进程的当前目录和进程用户ID与进程组ID。线程独占的有栈。一般默认情况下,线程栈是在进程的堆中分配栈空间,每个线程拥有独立的栈空间,为了避免线程之间的栈空间踩踏,线程栈之间还会有以小块guardsize用来隔离保护各自的栈空间,一旦另一个线程踏入到这个隔离区,就会引发段错误。

VAN 133

函数运行都会调用过程中查看线程堆栈

agent中拦截点的位置确定:在程序的运行过程中,有时我们也不太确定到底都调用了哪些函数,之后又老师的提醒,就是在不确定的位置添加线程堆栈,之后就很快的解决了问题:StackTraceElement[] aa = Thread.currentThread().getStackTrace();然后循环打印输出。...

qq_37723897的博客 666

线程函数调用总结

工作中碰到线程函数调用的问题,疑惑,学习并总结如下,方便以后查看。同时也激励自己在总结中进步。文中有部分内容有参考,文后附参考出处。 1、为什么类中的线程函数必须要声明静态? typedef void* THREAD_HANDLE; #define WINAPI __stdcall #define thread_proc WINAPI typedef unsigned int MCE_T

Eleanor_He的博客 875

线程-函数调用

引言 本专题是手动实现一个“线程”, 写这个项目的起因主要是为了为学习操作系统的人而准备的练手和巩固线程进程调用的知识. 而这个小项目是从我所写的玩具操作系统中抽离出来再加以改善的, 所以并不乎涉及更加底层的东西, 毕竟我也不会. 前言 在讲解小项目之前要先明白什么是函数调用? 函数又是怎么实现调用并返回到调用函数函数体中? 可能你不明白为什么线程会跟函数调用有关, 那是因为我们实现的功能只是...

啦啦啦 2163

使用信号机制在Linux程序中打印函数调用

#include <stdio.h> #include <stdlib.h> #include <signal.h> #include <execinfo.h> #include <ucontext.h> void handler(int signo, siginfo_t *info, void *context) { ucontext_t* ctx = (ucontext_t*)context; void *.

捕鲸叉的专栏 830

函数调用过程-栈帧 和 进程的关系

程序中,一个函数是一个过程,这个过程可以分为包括传入参数、过程代码、返回三部分构成。由于一个函数过程需要用到内部变量、临时变量等,所以需要在进程空间的栈空间分配一段存储片段来存储函数过程中的这些参数,该内存片段即为栈帧。

ordeder的专栏 4175

线程进程函数调用对话框Updatedata错误

MFC对象不支持多线程操作。MSDN这样解释的:                                                                                                                                               In a multi-threaded application

可乐鸡翅 3985

nt!PspInitPhase0函数调用ExCreateHandleTable函数创建了进程线程句柄表nt!PspCidTable并脱链

nt!PspInitPhase0函数调用ExCreateHandleTable函数创建了进程线程句柄表nt!PspCidTable并脱链

linux-0.11调试教程 476

linux查看进程函数调用栈,Linux下多线程程序崩溃时如何提取出所有线程函数调用栈...

尝试过三种方法都不凑效1.libc中的backtrace函数2.内联汇编,提取出ebp寄存器的值再回溯出函数调用栈(会有兼容性问题,x86下试过可以,一移植到其他平台就用不了,本人菜鸟,汇编不熟)3.gcc内建的两个函数Built-inFunction:void*__builtin_return_address(unsignedintlevel)Built-inFunction...

weixin_39761573的博客 621

进程切换时间片轮转和函数调用顺序解析

进程或者线程 ,在执行的过程中 有时间片的概念,当前这个时间片执行完毕,就需要把资源让出来给另外一个进程或者线程使用 让出来的时候,有现场保护和之后恢复的时候有恢复现场这个概念,但是函数调用一定是按顺序执行的,不会有一个函数调用但是还没有执行完就先调用下一个函数这样的概念。分开一个个嵌套调用就没有错,是因为ui节目的指针指向错误。不是因为函数调用顺序理解错了。这样写就调用出错 ,

weixin_72581824的博客 93

线程进程的联系和区别

1)最主要的就是进程是操作系统资源分配的最小单位,每个进程有自己的独立的地址空间(用户空间)。而一个进程中的所有信息对该进程所有的线程都是共享的包括进程的程序文本,程序的全局内存和堆内存、栈以及文件描述符(这是最根本的区别,也是其他区别的原因) 2)线程包含了表示进程内执行环境必须的信息,其中包括进程中标识线程线程id 、一组寄存器值、栈、调度优先级和策略、信号屏蔽字、erron变量。 3)

程序道 -Learning, Thinking and Coding <存储知识的金库> 394

GDB调试多进程和多线程

GDB调试单进程 参数列表 命令 命令缩写 命令说明 list l 显示多行源代码 break b 设置断点,程序运行到断点的位置会停下来 info i ...

wk_bjut_edu_cn的博客 633

进程线程,协程

这是我对这几个程的认识,会不断刷新认知。进程线程一个进程,即对应任务管理器一条process一个应用程序至少会开启一个进程<也有多进程,点开Chrome就知道了>而一个进程至少有一个线程线程间共享该进程的资源。线程是一个执行流,是CPU调度基本单位<意味着咱可以为了抢CPU的服务,启多线程>但是多线程是为了同步完成多项任务,不是为了提高运行效率,而...

weixin_34258078的博客 96

Linux中的各种栈:进程线程栈 内核栈 中断栈

Linux 中的各种栈:进程线程栈 内核栈 中断栈栈的作用1. 函数调用2. 多任务支持Linux 中有几种栈?各种栈的内存位置?1. 进程栈2. 线程栈3. 进程内核栈4. 中断栈 Linux 中的各种栈:进程线程栈 内核栈 中断栈 栈的作用 首先,栈 (stack) 是一种串列形式的数据结构。这种数据结构的特点是 后入先出 (LIFO, Last In First Out),数据只能在串列的一端 (称为:栈顶 top) 进行推入 (push) 和弹出 (pop) 操作。根据栈的特点,很容易的想到

BeginnerMind 4496

使用gdb调试多进程线程调试

gdb常用命令表 backtrace(或bt):查看各级函数调用及参数 finish:连续运行到当前函数返回为止,然后停下来等待命令 frame(或f):帧编号,选择栈帧 info(或i):locals查看当前栈帧局部变量的值 list(或l):列出源代码,接着上次的位置往下列,每次列10行 list行号:列出从第几行开始的源代码 list函数名:列出某个函数的源代码 next(或

HelloKTT的博客 465

进程线程的区别

11

zion--6135的博客 242

gdb调试多进程与多线程

一,gdb的基础知识 1&gt;介绍: gdb是Linux环境下的代码调试工具。  2&gt;使用:需要在源代码生成的时候加上 -g 选项.  3&gt;开始使用: gdb binFile  4&gt;退出:ctrl + d 或 quit  5&gt;调试过程中的常用命令:   list/l 行号:显示binFile源代码,接着上次的位置往下列,每次列10行。    list/l 函数名:列...

weixin_41010318的博客 278

两个线程同时调用一个函数会出现什么情况?

最近在研究多线程,然后突然想到如果两个线程同时访问一个函数的话,要不要加锁呢,加锁怎么加,不加又怎样这样的问题..然后去网上找了些帖子学习学习...... 上面的代码明显执行串了!!!! 函数本身只是代码,代码是只读的,无论多少个线程同时调用都无所谓,因为是只读嘛.但是函数里面总要用到暑假 ,如果数据属性线程级别(比如函数形参-->局部变量-->存在栈上-->每个线程...

qq_37611061的博客 3192
上一篇: 内存分配方式
realcs
博客等级 码龄21年 1粉丝 2原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值