这意味着两个线程都可以进行写访问.
如果你不使用CLONE_VM标志,那么两个线程根本没有共享内存!
(pthread_create()在内部设置CLONE_VM标志).
有可能做你想做的事 – 但这将是非常困难的:
使用共享内存函数(例如shmget())而不是标准函数(例如malloc())分配所有内存块.
如果创建了新线程,则直接使用“clone()”而不是“pthread_create()”且未设置CLONE_VM标志.
共享内存在线程之间共享,并且由“正常”内存分配函数(例如malloc())创建的线程不在线程之间共享. mmap()映射内存也是如此.
创建新线程时,会复制此类内存块(由malloc或mmap创建),以便两个线程在同一地址拥有自己的内存块副本.如果一个线程写入此地址,则另一个线程将看不到更改.
分配更多“共享”内存相当棘手.如果只应在分配线程和未创建的子线程之间共享内存,这很容易.很难在已经运行的线程之间或作为不同已经运行的线程的(间接)子线程的线程之间共享内存.
线程没有共享堆栈内存,因此无法访问彼此的堆栈.
默认情况下不会共享全局变量和“静态”变量 – 为了使它们在线程之间“共享”,需要一些棘手的编程.
总结以上是内存溢出为你收集整理的linux – 有一个基于线程的mprotect吗?全部内容,希望文章能够帮你解决linux – 有一个基于线程的mprotect吗?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)