线程内的动态变量声明

时间:2018-01-13 11:54:30

标签: multithreading dynamic-memory-allocation

正如我所知,除数据段和代码段线程外,还共享堆段

What resources are shared between threads?

然后如果我在线程内部使用malloc()或calloc()动态创建变量,那么同一进程的所有其他线程是否可以访问该变量?

1 个答案:

答案 0 :(得分:0)

理论上,如果你知道内存地址。是的,堆分配的变量应该可以从同一进程中的任何线程访问。

  
    glibc-2.2 +的 {malloc,calloc,realloc,free,posix_memalign}是线程安全的

  
     

http://linux.derkeiler.com/Newsgroups/comp.os.linux.development.apps/2005-07/0323.html

Original post

  

通常,多线程系统上的malloc / new / free / delete是线程安全的,所以这应该没问题 - 在一个线程中分配,在另一个线程中解除分配是很常见的事情。

     

由于线程是一个实现功能,它当然是依赖于实现的 - 例如某些系统要求您链接多线程运行时库。

And this

除了回答:the link you posted

  

线程与传统的多任务操作系统不同   过程中:

     
      
  • 进程通常是独立的,而线程作为子集存在   过程流程带有可观的状态信息,而
  •   
  • 进程共享状态中的多个线程以及内存和   其他资源进程有单独的地址空间,而
  •   
  • 线程共享其地址空间进程只能通过进行交互   系统提供的进程间通信机制。上下文
  •   
  • 在同一进程中的线程之间切换通常比...更快   流程之间的上下文切换。
  •   

所以,是的。