[so] [Tema2][Windows] Parametru CreatePipe

Darius-Florentin Neatu neatudarius at gmail.com
Sun Apr 2 15:44:01 EEST 2017


Eu intrebasem despre limita pentru nSize de la Pipe pentru ca in
implementarea de pe Windows fac a | b | c serial. Adica dupa ce s-a
terminat a, b incepe sa citeasca. Dupa ce s-a terminat b, c incepe sa
citeasca.

Cu limita cel putin 20000000 pentru nSize trec toate testele local &
vmchecker (doar 2 teste au nevoie de limita > cea default), dar as vrea imi
iasa pipe-ul eficient si pe windows.

Am o varianta in care fac paralel. Ex: a | b (b sa poate citi din pipe
imediat dupa ce a face primul write).

In do_on_pipe fac 2 threaduri:
- thread 1: redirect, CreateProcess("a", ..), undo redirect (inchide handle
de fisiere deschisi in redirect sau veniti de la comanda parinte pentru
pipe  - deci inchide write handle din pipe)
- thread 2: redirect, CreateProcess("b", ...)  si nu se opreste
Cand rulez a | b apare in terminal tot rezultatul comenzii "a | b", am pus
printuri in program: thread 1 asteapta procesul copil corespunzator lui a,
face close la capatul de write, da ExitThread(cod_copil), iar parintele il
asteapta cu success.
Cu toate acestea comanda b ramane in asteptare. Eu ma asteptam ca aceasta
abordare sa fie corecta: procesul b sa se opreasca deoarece s-a terminat
procesul a si in thread1 am inchis capatul de write. Deci cand el termina
de citit tot din pipe.

As vrea sa stiu daca logica mea e buna. Am tot modificat configurarile, in
niciuna nu se opreste b.

Implementarea se gaseste pe Gitlab[1]. Diferenta intre cele 2 abordari de
la pipe o face linia 552.
// #define PIPE_WITH_THREADS
Afecteaza doar comportamentul functiei do_on_pipe.

P.S. Am dat access pentru Costin si Razvan. Unde gasesc lista cu
resposabilii de la tema X? (sa le pot da access tuturor pentru etapa de
corectare)

Cu bine,
Darius

[1] https://gitlab.cs.pub.ro/darius.neatu1995/SO


On Sun, Apr 2, 2017 at 3:25 PM Darius-Florentin Neatu <neatudarius at gmail.com>
wrote:

> Ok. Multumesc mult!
>
> De asemenea, as dori sa intreb daca ne puteti recomanda o metoda simpla de
> a verifica existenta memory leaks si pentru handle-uri de fisiere care nu
> au fost inchise la finalul executiei programului.
>
> Cu ce tool-uri va fi testata tema pe Windows pentru problemele mentionate
> mai sus? (am inteles ca valgrind nu este portat pe cygwin)
>
> Darius
>
> On Sun, Apr 2, 2017 at 1:16 PM Costin Lupu <costin.lup at gmail.com> wrote:
>
> On 04/02/2017 03:33 AM, Darius-Florentin Neatu via so wrote:
> > Salut,
> >
> > Vom fi depunctati daca punem o valoare mare pentru numarul maxim de
> > bytes care se pot afla la un moment dat in pipe? (parametrul nSize de la
> > CreatePipe).
> >
> > Ex. 20MB
>
> Darius, de ce ar fi asta o problemă? Uite ce scrie în documentație [1]
> pentru nSize: "The size is only a suggestion; the system uses the value
> to calculate an appropriate buffering mechanism". Deci nu veți fi
> depunctați pentru așa ceva.
>
> [1]
>
> https://msdn.microsoft.com/en-us/library/windows/desktop/aa365152%28v=vs.85%29.aspx
>
>
> Costin
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://cursuri.cs.pub.ro/pipermail/so/attachments/20170402/2fd67ed6/attachment-0001.html>


More information about the so mailing list