进程和线程的区分是什么 进程和线程的区分
文章插图
线程同步:在多线程编程中,处理共享资本的冲突 。同步:在多进程编程中,处理共享资本冲突的结果 。但是有些同学讨论线程同步和进程同步不够深入 。比如互斥和前提变量是否可以同时用于线程同步和进程同步,质量是不一样的 。首先我们知道在linux下,每个进程都有自己的进程空 。假设进程A和进程B各有一个互斥体,放在进程的全局静态区,那么AB进程是感知不到互斥体的 。
互斥锁和先决条件变量来自Posix.1 thread scale,它们总是可以用来同步进程中的线程 。
Posix还允许互斥体或前提变量用于进程间的同步,如果它们存储在多个进程共享的内存区域中的话 。看这里,你发明了什么吗?线程同步和进程同步的质量区别在于锁放在那里,私有进程空还是共享进程空 。我们来看看锁是否具有进程共享的属性 。
内核,用户客栈
在32位Linux系统上,一个进程空的位置是4G,包括1G内核位置空-内核栈,3G用户位置空-用户栈 。
内核初期,所有进程都是通过进程内存映射共享的 。但是每个进程都有独立的4G虚构内存空,相互独立,互不打扰(一开始大家统一了一个内存原始映射) 。
用户熟悉四个内存区,包括代码区、全局数据区、堆区和inn区 。
用户栈中的堆区和栈是有区别的,也就是进程堆和进程栈 。
进程堆、进程内部和线程内部
1.线程栈的空在我的进程的堆区和共享内存区之间打开,线程和我的进程之间的共享进程的user 空打开,这样线程栈就可以互相访问 。线程的起点和大小存储在pthread _ attr _ t中,inn的大小不是用来决定inn是否可以越界,而是用来初始化缓冲区的大小,防止inn溢出(可能是安全缺口的大小) 。
2.当进程初始化时,系统会在进程的位置空创建一个堆,称为进程的默契堆 。进程中的所有线程共享这个堆 。当然,可以为不同的线程添加一个或多个堆,以便一起或独立地应用 。-一个进程可以有多个堆 。
3.当创建一个线程时,系统会在进程空的位置给线程栈分配1块内存,分别是1MB、4MB或8MB 。这些客栈是独立的,但是它们仍然可以相互访问,因为线程共享内存空
4.堆分配:从操作系统的角度来看,在进程中有两种分配内存的方式 。这种分离是通过两个系统实现的:brk()和mmap(),它们被malloc封装在glibc中 。
5.线程内部状态-内存分配测试代码
[cpp]检查一般文本
#宝宝
#宝宝
#宝宝
#宝宝
#宝宝
#宝宝
#宝宝
空*函数(空*参数)
{
long int tid =(long int)syscall(SYS _ gettid);
Printf(该线程的ID为:%ld\,tid);
Int a = 10
int b = 11
int * c =(int *)malloc(sizeof(int));
Printf(\in线程id:%u a:%p b:%p c:%p\,tid,a,
Printf(\拆分线程id:%ld\,tid);
上床睡觉(20);
free((void *)c);
}
void main()
{
pthread_t th1,th2
printf(\pid=%u\,(int)getpid());
func(NULL);
int ret=pthread_create( th1,NULL,func,NULL);
如果(ret!=0)
{
printf(hread1[%d]:%s\ ",th1,strerror(errno));
}
ret=pthread_create( th2,NULL,func,NULL);
如果(ret!=0)
{
printf(\"thread2[%d]:%s\ ",th2,strerror(errno));
}
pthread_join(th1,NULL);
pthread_join(th2,NULL);
}
输出:
[le@localhost threadStack]$ ./threadStack_main pid=16433
这个线程的ID是:16433
In线程id:16433 a:0x 60107 c b:0x 7 fffc 89 ce 7 AC c:0x1b 54010
单独线程id:16433
这个线程的ID是:16461
这个线程的ID是:16460
In线程id:16461 a:0x 60107 c b:0 x7f 6 ab 096 efcc:0 x7f 6 ab 40008 c 0
单独线程id:16461
In线程id:16460 a:0x 60107 c b:0x 7 f 6 ab 897 efcc:0x 7 f 6 AAC 0008 c 0
单独线程id:16460
主线程盗用func后
[le @ localhost线程堆栈]$ sudo cat/proc/16433/maps
00400000-00401000 r-XP 00000000 FD:02 11666/home/le/code/thread stack/thread stack _ main
00600000-00601000 r-p 00000000 FD:02 11666/home/le/code/thread stack/thread stack _ main
00601000-00602000 rw-p 00001000 FD:02 11666/home/le/code/thread stack/thread stack _ main
01b 54000-01b 75000 rw-p 0000000 00:00 0[堆]
7 F6 abb 899000-7 F6 abb a4f 000 r-XP 00000000 FD:00 100678959/usr/lib 64/libc-2.17 。因此
7 F6阿巴斯4 f 000-7 F6 abb C4 f 000-p 001 b 6000 FD:00 100678959/usr/lib 64/libc-2.17 。因此
7 F6 ABC 4 f 000-7 F6 abbc 53000 r-p 001 b 6000 FD:00 100678959/usr/lib 64/libc-2.17 。因此
7 F6 abbc 53000-7 F6 abbc 55000 rw-p 001 ba 000 FD:00 100678959/usr/lib 64/libc-2.17 。因此
推荐阅读
- 五种快速有效的背诵方法,转给自己和家人!
- 具俊晔|越来越离谱了!曝大S和具俊晔是合同夫妻,男方签20年合约包吃住
- 减少鱼尾纹和眼部皱纹的方法 如何减少眼角皱纹
- 米糕的做法松软又好吃的做法和配方 米糕的做法松软又好吃
- 于文文|于文文在地下商场看中了一套110块钱的衣服,和老板砍价没能砍下来
- 杨少华|90岁杨少华被曝街头摆摊,和蔼可亲满脸笑容,满桌子串儿引人注目
- 一晚赚200多万,直播电商MCN是如何运作和赚钱的?
- 怎样增加自己的亲和力 如何提高亲和力
- 减小放大器噪音的几种途径和方法 减少噪音的方法
- 汪小菲|同样是亲吻大s对汪小菲和具俊晔态度天壤之别!肢体动作反应一切