Information on process synchronization primitive in Windows3.1 has not been found. Due to non-preemptive nature of Windows3.1, it seems to be natural to think that no synchronization primitive is provided in Windows3.1. A process continues to run until it finishes its critical section, and then yields the CPU to another process.
In Windows95, the following synchronization primitives are provided:
For inter-process communication, message queues are provided
in both
Windows3.1 and Windows95. Unlike Windows3.1
which has only one system-wide queue, Windows95 provides a private
per-thread queue for 32-bit applications (16-bit applications still
share a single queue so that they run on the same environment as
Windows3.1). Except the primary thread for each process, the message
queue is not allocated until it is needed (i. e. on-demand
allocation). Applications can also
communicate each other by shared memory method through the
shared address space from 2G to 3G (see next section).