正如我所知,除数据段和代码段线程外,还共享堆段
What resources are shared between threads??
然后如果我在线程内部使用malloc()或calloc()动态创建变量,那么同一进程的所有其他线程是否可以访问该变量?
答案 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
通常,多线程系统上的malloc / new / free / delete是线程安全的,所以这应该没问题 - 在一个线程中分配,在另一个线程中解除分配是很常见的事情。
由于线程是一个实现功能,它当然是依赖于实现的 - 例如某些系统要求您链接多线程运行时库。
除了回答:the link you posted
线程与传统的多任务操作系统不同 过程中:
- 进程通常是独立的,而线程作为子集存在 过程流程带有可观的状态信息,而
- 进程共享状态中的多个线程以及内存和 其他资源进程有单独的地址空间,而
- 线程共享其地址空间进程只能通过进行交互 系统提供的进程间通信机制。上下文
- 在同一进程中的线程之间切换通常比...更快 流程之间的上下文切换。
所以,是的。