Ahogy már a bevezetőben említettük a Sather nyelvnek létezik egy párhuzamos és osztott programozást lehetővé tevő kiterjesztése: a pSather. Ez három párhuzamos programozási szerkezetet is biztosít, amelyek az objektum orientáltsággal (a fejlesztők szerint) ortogonálisak egymásra. Ezen három konstrukcióval már szinte minden megvalósítható.
A nyelvben a párhuzamos programozási módszerei rendkívül sokoldalúak, ezért ezeknek csak egy kis részéről lesz itt említés. Ennél jóval részletesebb dokumentáció a bevezetőben említett Sather oldalakon található.
Egyszerű szálakat a ‘fork’ kulcsszóval készíthetünk:
Illetve ha sok hasonló szálat akarunk indítani, akkor a ‘parloop’ kulcsszó használata ajánlatos:
A @i osztott környezetben azt jelentené, hogy minden szálat külön clusteren indítson el.
Egy valós alkalmazási lehetőségként tekintsük az alábbi mátrix-szorzást (minden sort egymástól függetlenül számolunk).
A legegyszerűbb szinkronizációs eszköz a ‘sync’, mely hatására az egyszerre indított szálak befejezését bevárja a hívó rész. Ez a blokkoló szinkronizáció. Minden más szinkronizáció a ‘lock’ valamilyen formája. Az alap konstrukció a monitor alkalmazása, amely magas szintű eszközt biztosít olyan objektumok létrehozásához, amelyek eljárásai kölcsönös kizárás mellett futnak.
A szinkronizációk egyik alapesete a zárolás (kizárás). Ez könnyen holtponthoz vezetne, amely ellen csak valami alapszintű védelem van beépítve a nyelvbe, biztos nincsen. Zárolást a $LOCK osztály példányosításával konkretizálhatunk, aminek példányosításával zárokat készíthetünk, melyeket a ‘lock’ kulcsszóval aktiválhatunk (és hatása ‘end’-ig tart). Például:
A ‘GATE’ és a ‘GATE{T}’ osztályok a pSather legösszetettebb és leghatékonyabb eszközei. A GATE osztály korábban monitor volt, de aztán annál egy általánosabb és sokkal hatásosabb eszköz lett. A feladata hasonlóan adatok elrejtése kapuk mögé, de itt már nem csak egy eljárás futhat egy időben, mivel olvasni nyugodtan lehetne több szálon is egyszerre. De ekkor külön jelölni kell azokat az eljárásokat, amelyek csak kizárólagosan futhatnak (amik módosítanak). Tehát ez az eszköz lehetőséget biztosít az ismert író-olvasó probléma magas szintű megvalósítására.
Párhuzamos programozás egy további népszerű eszköze az üzenetküldés. Satheben erre is van lehetőség, a $TASK típusból származtatott osztályok segítségével, amelyek taszkokat implementálnak. Kommunikációt PORT objektumokon keresztül végezhetnek:. Például: