🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: pl.comp.os.linux.programowanie
Article #72991

::read i ::poll

#72991
From: heby
Date: Wed, 04 Nov 2020 09:31
26 lines
2328 bytes
Cześć.

Czytam z rurki za pomocą ::read. Blokująco, bo na tym polega 
synchronizacja w tym konkretnym przypadku.

Ale muszę raz na jakiś czas stwierdzić, czy nie czas awaryjnie się 
składać, obejrzeć jakas flagę, zawołać jakiś watchdog itd.

::read blokującego nie da się przerwać. Co prawda jest niby EINTR ale ja 
czekam w wielu wątkach na wielu rurach i musze precyzyjnie przerwać 
bardzo konkretny ::read, ten, a nie inny.

Rozwiązanie okazało się proste: użyć ::poll. Czeka on aż pojawią się 
jakieś dane do odczytu, ale ma też timeout po którym zwraca mi 
sterowanie i to załatwia temat przerywalnosci odczytu.

I wszystki super działa, tylko jest ... znacznie wolniejsze. Wywołanie 
::read jest szybsze niż pary ::poll->::read. No i co z tym teraz zrobić? 
Jest jakaś inna metoda na posiadanie blokującego ::read ale jednocześnie 
możliwosci przerwania tego read na żądanie?

PS. Mogę zamknąc deskryptor pliku i wtedy ::read wylautuje z błedem. Ale 
to jest nieeleganckie, ponadto nie dośc że powoduje race-conditions, to 
jeszcze jest destrukcyjne, tzn komunikacja jest już niemożliwa do 
wznowienia. A ja chce przerwać read, coś sprawdzić i wrócić do czekania 
na dane.
Technical Details
Message-ID: <rntsee$3b1$1@dont-email.me>
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.icm.edu.pl!newsfeed.pionier.net.pl!2.eu.feeder.erje.net!feeder.erje.net!border1.nntp.ams1.giganews.com!nntp.giganews.com!eternal-september.org!feeder.eternal-september.org!reader02.eternal-september.org!.POSTED!not-for-mail

Show Full Headers
Complete Article Headers
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.icm.edu.pl!newsfeed.pionier.net.pl!2.eu.feeder.erje.net!feeder.erje.net!border1.nntp.ams1.giganews.com!nntp.giganews.com!eternal-september.org!feeder.eternal-september.org!reader02.eternal-september.org!.POSTED!not-for-mail
From: heby <heby@poczta.onet.pl>
Newsgroups: pl.comp.os.linux.programowanie
Subject: ::read i ::poll
Date: Wed, 4 Nov 2020 10:31:56 +0100
Organization: A noiseless patient Spider
Lines: 26
Message-ID: <rntsee$3b1$1@dont-email.me>
Mime-Version: 1.0
Injection-Date: Wed, 4 Nov 2020 09:31:58 -0000 (UTC)
Injection-Info: reader02.eternal-september.org; posting-host="57daff21cf0670d85dab8809ff3cc0ab"; logging-data="3425"; mail-complaints-to="abuse@eternal-september.org"; posting-account="U2FsdGVkX1/oL0MP0PUSqt9RrEGpKWJo"
User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:68.0) Gecko/20100101 Thunderbird/68.12.1
Cancel-Lock: sha1:6RMWar9sqMgn7G92Jvb7d9D/eFQ=
X-Mozilla-News-Host: snews://news.eternal-september.org:563
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit