Witam,
potrzebuję czegoś w stylu standardowych sekcji krytycznych (win) czy rekursywnych mutexow (linux), lecz z priorytetami. Potrzebuję zsynchronizować operację w kilku wątkach wg. najważniejszych do najmniej ważnych, które korzystają z tym samych zasobów. W zwykłych sekcjach krytycznych w windowsie, gdy kilka wątków bije się o mutexa, to po jego zwolnieniu zupełnie przypadkowy wątek go zyskuje bez względu na jakiekolwiek czynniki. Ja potrzebuje, aby mutex był przekazywany wg. z góry ustalonych priorytetów.
Na całą aplikację tylko w 1 miejscu coś takiego muszę synchronizować, więc równie dobrze mogłaby to być własna klasa, która by tym zarządzała, lecz tu się pojawia problem z wydajnością. Musiałbym trzymać listę wszystkich 'bijących się' wątków i ją często przeszukiwać, co jest dość nieeleganckim rozwiązaniem. Myślałem o kombinowaniu z WaitForSingleObject i sygnałach, aby powiadomić wątek, że jest jego kolej, lecz tu się pojawia problem z odpowiednikami na Linuxie...
Stąd moje pytanie - czy windowsowe/linuxowe API zawiera jakieś metody, aby uzyskać to o czym mówię? Jeżeli nie, to jakie byłyby linuxowe odpowiedniki poniższych windowsowych funkcji?
typedef HANDLE API_SIGNALVAR;
#define API_SIGNALVAR_INIT(a) a = CreateEvent(NULL,true,false,"NULL")
#define API_SIGNALVAR_RELEASE(a) CloseHandle(a)
#define API_SIGNALVAR_SIGNAL(a) SetEvent(a)
#define API_SIGNALVAR_RESET(a) ResetEvent(a)
#define API_SIGNALVAR_WAIT(a) WaitForSingleObject(a, INFINITE)
Z góry dzięki za pomoc