title: How do two or more threads share memory on the heap that they have allocated?
body: <p>As the title says, how do two or more threads share memory on the heap that they have allocated? I've been thinking about it and I can't figure out how they can do it. Here is my understanding of the process, presumably I am wrong somewhere.</p>
  
  <p>Any thread can add or remove a given number of bytes on the heap by making a system call which returns a pointer to this data, presumably by writing to a register which the thread can then copy to the stack.
  So two threads A and B can allocate as much memory as they want. But I don't see how thread A could know where the memory that thread B has allocated is located. Nor do I know how either thread could know where the other thread's stack is located. Multi-threaded programs share the heap and, I believe, can access one another's stack but I can't figure out how.</p>
  
  <p>I tried searching for this question but only found language specific versions that abstract away the details.</p>
  
  <p>Edit:
  I am trying not to be language or OS specific but I am using Linux and am looking at it from a low level perspective, assembly I guess.</p>