Shared-state threads in the same memory space.  They could do I&#x2F;O independently, lock and unlock critical sections, and block on semaphores.  Worked fine.  To create a new thread, you called FORK$. See section 8, page 2, of the 1966 EXEC 8 manual.[1]<p>Here are Djykstra&#x27;s P and V functions for the UNIVAC 1108, to run in user space.  Written in 1972.[2]<p>I once added support for threads to Pascal for that machine. Had to add per-thread stacks and manage non-contiguous stack growth.<p>[1] <a href="https:&#x2F;&#x2F;ia601603.us.archive.org&#x2F;27&#x2F;items&#x2F;bitsavers_univac1100tiveReferenceManual1966_36328697&#x2F;UP-4144_1108_Executive_Reference_Manual_1966.pdf" rel="nofollow">https:&#x2F;&#x2F;ia601603.us.archive.org&#x2F;27&#x2F;items&#x2F;bitsavers_univac110...</a><p>[2] <a href="http:&#x2F;&#x2F;www.fourmilab.ch&#x2F;documents&#x2F;univac&#x2F;fang&#x2F;" rel="nofollow">http:&#x2F;&#x2F;www.fourmilab.ch&#x2F;documents&#x2F;univac&#x2F;fang&#x2F;</a>