Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

::open i timeout

2 views
Skip to first unread message

heby

unread,
Oct 21, 2020, 11:23:43 AM10/21/20
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)?
0 new messages