heby
unread,Oct 21, 2020, 11:23:43 AM10/21/20You do not have permission to delete messages in this group
Either email addresses are anonymous for this group or you need the view member email addresses permission to view the original message
to
Cześć.
Jest pipe.
Jest na nim ::open. Blokujący. Blokujący, bo w/g manuali nie wolno nic
przesyłać przez rurę do momentu aż oba końce nie będa w stanie "open" a
to gwarantuje (tylko?) wyjscie z open blokującego.
Chcę, aby można go było "przerwać". Tzn widze to na dwa sposoby:
1) inny wątek wysyła flagę "dość, to nie ma sensu"
2) ::open (lub substytut) wychodzi sobie po paru ms i pyta co dalej.
Ponieważ rownolegle takich "openów" jest kilka, w dodatku w tle ciągle
się wołają, nie mogę wysłać jakiegoś ogólnego sygnału, bo nie wiem gdzie
trafi. Muszę przerwać jeden, konkretny open.
Jak to się prawidłowo rozwiązuje?
Chwilowo mam taką emulację: odpalam ::open w innym watku, a w głównym po
jakimś czasie wołam pthread_cancel. Tylko że to jest kiepskie.
Dla ::read mam ::poll i to działa bardzo fajnie.
No własnie.
Czy powinienem uzyć ::open nieblokującego a zaraz za nim w pętli
::poll/::ppoll z POLLOUT? Toeretycznie taki poll czeka aż rura stanie
się "writable". Czy to prawidłowe rozwiązanie (nie testowałem jeszcze)?