<div dir="auto">Mulțumesc!</div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Fri, Apr 3, 2020, 19:53 Daniel Baluta <<a href="mailto:daniel.baluta@gmail.com">daniel.baluta@gmail.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">On Fri, Apr 3, 2020 at 6:21 PM Daniel Nicolescu via so2<br>
<<a href="mailto:so2@cursuri.cs.pub.ro" target="_blank" rel="noreferrer">so2@cursuri.cs.pub.ro</a>> wrote:<br>
><br>
> Salut,<br>
><br>
> Cum ar trebui tratat următorul scenariu?<br>
> * 2 thread-uri diferite fac read în mod concurent, iar bufferul pentru citire este gol<br>
> * ambele apeluri de read se blochează<br>
> * apare înreruperea de la hardware și se pun date în bufferul de citire și se notifică thread-urile care au intrat în sleep și așteaptă să citească<br>
> * ambele thread-uri se trezesc în același timp și încearcă să citească datele din buffer; vor exista probleme de sincronizare<br>
<br>
In teorie, dupa ce ambele threaduri se trezesc ar trebui sa incerce se<br>
reacapareze spinlock-ul.<br>
Si doar thread-ul care apuca sa acapareze locul va citi datele din buffer.<br>
<br>
In practica, eu as face open-ul exclusiv astfel incat sa nu am doua<br>
thread-uri care<br>
citesc in paralel. De altfel, pe linia seriala nici nu are foarte mult<br>
sens sa ai<br>
doi readeri. De exemplu daca incerci sa deschizi minicom o sa vezi ca al<br>
doilea open va esua.<br>
</blockquote></div>