How to create union of domains and define functions on subdomains?

I went over the Mesh generation part of the doc. Yes we can add meshes. I tried the following code.

  border a(t=0, 2*pi){x=cos(t); y=sin(t); label=1;}
  border b(t=0, 2*pi){x=0.5+cos(t); y=sin(t); label=2;}
  mesh Th1 = buildmesh(a(50));
  mesh Th2 = buildmesh(b(50));
  mesh Th = Th1+Th2;
  plot(Th);

Then the mesh looks like the following

The meshes overlap! Maybe I missed some other parts of the doc?

If there are only two disks, I can easily define the whole boundary explicitly and then mesh it. However, the situation becomes very complicated if there 3 disks, which may or may not overlap.