Tengo que imprimir esta secuencia para 3 procesos: P, Q, R. PQQRR usando solo semáforo. ¿Cómo hago esto?

Implementar solo con semáforo puede ser complicado en este caso. Use una combinación de variable de condición y un semáforo para implementar.

Pseudocódigo:
1> PQ y R son valores posibles para la variable de condición.
2> Inicie los tres hilos / procesos.
3> Cada proceso espera que el valor de la variable de condición sea igual a su nombre (por ejemplo, el hilo P esperará hasta que la variable de condición tenga el valor P)
4> Cada condición de hilo señala el siguiente proceso en la tubería, por lo que se ejecuta. Esta tubería puede ser predeterminada.

Lo mismo se puede implementar de una manera fea usando semáforos. Deje que cada proceso tenga su propio semáforo. Todos esperan en su propio semáforo y la señalización de la condición se realiza mediante un proceso anterior en la secuencia que desbloquea el proceso que se ejecutará a continuación. Esto será feo y propenso a errores.