多个线程同时调⽤⼀个函数的情况
记录1:
每个线程都有⾃⼰的栈),那么多线程同时调⽤是没关函数⾥⾯要⽤到数据 ,如果数据属于性线程级别的(⽐如函数形参-->局部变量-->存在栈上-->每个线程都有⾃⼰的栈一个线程可以包含多个进程
系的,因为⽤的都是本线程的数据;但是如果函数⽤到⼀些全局数据,⽐如全局变量,根据堆内存⾸地址去访问的堆内存(形参传⼊的),同时操作⼀个数据结构(如对⼀个链表的操作),静态局部变量,那就存在数据安全问题,必须要加锁对函数访问加锁。
1.线程中函数的调⽤:
每个进程都会有⾃⼰的虚拟地址空间,同⼀个进程中的每个线程都会在这个虚拟空间中,并被分配相应的资源。线程中的函数实体是在内存中,⽽函数中的局部变量则会⼀次被push到栈中。如果是A函数调⽤B函数,则会先将A函数的参数和局部变量push到队列中,再将B函数的参数和局部变量push到队列中。
2.两个线程调⽤同⼀个函数:
两个线程中的函数的局部变量由于是保存在不同的线程中,因此不需要进⾏互斥处理。
3.两个不同进程中的两个线程调⽤同⼀个处理函数:
同样,两个线程中的函数的局部变量由于是保存在不同的线程中,因此不需要进⾏互斥处理。
结论:
因此需要互斥处理的,⼀般是函数中有全局变量,有动态申请的空间,有静态局部变量,有需要进程数据循环发送之类的操作需要进⾏互斥处理。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。