[so2] [Tema2] SMP Safety

Daniel Baluta daniel.baluta at gmail.com
Fri Apr 3 19:53:43 EEST 2020


On Fri, Apr 3, 2020 at 6:21 PM Daniel Nicolescu via so2
<so2 at cursuri.cs.pub.ro> wrote:
>
> Salut,
>
> Cum ar trebui tratat următorul scenariu?
> * 2 thread-uri diferite fac read în mod concurent, iar bufferul pentru citire este gol
> * ambele apeluri de read se blochează
> * 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ă
> * ambele thread-uri se trezesc în același timp și încearcă să citească datele din buffer; vor exista probleme de sincronizare

In teorie, dupa ce ambele threaduri se trezesc ar trebui sa incerce se
reacapareze spinlock-ul.
Si doar thread-ul care apuca sa acapareze locul va citi datele din buffer.

In practica, eu as face open-ul exclusiv astfel incat sa nu am doua
thread-uri care
citesc in paralel. De altfel, pe linia seriala nici nu are foarte mult
sens sa ai
doi readeri. De exemplu daca incerci sa deschizi minicom o sa vezi ca al
doilea open va esua.


More information about the so2 mailing list