Lem*_*ism 14 heap multithreading
正如标题所说,两个或多个线程如何共享它们分配的堆上的内存?我一直在考虑它,我无法弄清楚他们是如何做到的.这是我对这个过程的理解,大概我错了.
任何线程都可以通过进行系统调用来添加或删除堆上给定数量的字节,系统调用返回指向此数据的指针,可能是通过写入线程然后可以复制到堆栈的寄存器.因此,两个线程A和B可以根据需要分配尽可能多的内存.但我没有看到线程A如何知道线程B分配的内存位于何处.我也不知道任何一个线程如何知道其他线程堆栈的位置.多线程程序共享堆,我相信,它可以访问彼此的堆栈,但我无法弄清楚如何.
我尝试搜索这个问题,但只发现了特定于语言的版本,这些版本抽象了细节.
编辑:我试图不是语言或操作系统特定,但我正在使用Linux,我从低级别的角度看待它,我想是汇编.
usr*_*usr 13
我对你的问题的解释:线程A如何知道指向内存B的指针正在使用?他们如何交换数据?
答:它们通常以指向公共内存区域的公共指针开头.这允许他们交换其他数据,包括彼此指向其他数据的指针.
例:
pp给它们p和处理指向的数据p在真实语言(C#)中它看起来像这样:
//start function ThreadProc and pass someData to it
new Thread(ThreadProc).Start(someData)
Run Code Online (Sandbox Code Playgroud)
线程通常不会访问彼此的堆栈.一切都从传递给线程过程的一个指针开始.
创建线程是OS功能.它的工作原理如下:
这就是someData到达ThreadProc的方式.这是共享第一个初始数据项的方式.步骤1-3由父线程同步执行.4发生在子线程上.