Системы Unix имеют очереди сообщений:
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/msg.h>
int msgsnd(int msqid, const void *msgp, size_t msgsz, int msgflg);
ssize_t msgrcv(int msqid, void *msgp, size_t msgsz, long msgtyp, int msgflg);
, которые используются гораздо реже, чем сообщения Windows, но работают очень похожим образом. Также очень похожая концепция, язык Go прекрасно реализует CSV (, сообщающий последовательные процессы ), который является превосходной многозадачной парадигмой, потому что не страдает от экспоненциального роста сложности. Я бы порекомендовал системным программистам Unix больше использовать очереди сообщений.
Сообщения Windows также несколько похожи на сигналы Unix, но сигналы Unix (обычно) не имеют аргументов, их количество очень ограничено (часто всего 32 по сравнению с тысячами сообщений Windows), и обработчики сигналов должны выполняться в странная приостановленная среда, которая делает их намного менее практичными. Тем не менее, сигналы гораздо более популярны в программировании Unix, чем очереди сообщений.
Относительно семафоров
Вместо того чтобы использовать семафоры (которые имеют прикрепленный счетчик), вы должны сначала попытаться использовать мьютексы, которые более легки и удобны для синхронизации потоков внутри одного и того же процесса.