Bine, acum să încerc să fac un rezumat la ceea ce am înțeles:
- thread-ul care face so_init ar trebui să se afle în coada noastră cu
priorități
- nu se asigură nicicum că so_end va fi făcut după ce toate thread-urile
își vor încheia execuția așadar trebuie să ne asigurăm noi că acest lucru
se întâmplă în so_end(rulând cu helgrind am văzut că se poate face so_end
în timp ce mai sunt thread-uri care folosesc acele structuri de date și
apare segfault)
- în cadrul thread_start din enunț trebuie să ne asigurăm că thread-urile
își apelează handler-ul în ordinea din coada cu priorități iar după
apelarea acestuia ele trebuie să se scoată singure din coadă sau pentru a
apela pthread_join() în so_end ar trebui să le punem la finalul cozii și să
lăsăm eliberarea doar thread-ului care face so_init

În joi, 2 mai 2019 la 11:42, Mihai Barbulescu <b12mi...@gmail.com> a scris:

> On Wed, 1 May 2019 at 19:31, Ionuț Mihalache via so
> <so@cursuri.cs.pub.ro> wrote:
> >
> > Și încă o întrebare pe care am uitat să o adresez: Cum să fac debug
> pentru că dacă folosesc printf pot apărea sincronizări nedorite?
>
> Sugestia 1 (profesionista): logging intr-o zona din RAM/memoria
> procesului mapata dinainte in procesul tau numit "scheduler" in care
> threadurile scriu. Apoi ai alt proces care colecteaza aceste loguri. O
> scriere in RAM tot o sa te coste deci poti avea desincronizari. Cele
> doua procese impart un /dev/shm.
> Sugestia 2 (cea mai la indemana pt voi):
> http://valgrind.org/docs/manual/hg-manual.html
>
> GDB nu poate fi folosit prea reliable pentru ca asa cum printf strica
> sincronizarile ghici ce-ar face un breakpoint :)
>
> --
> Cu stimă,
> Mihai Bărbulescu
>
_______________________________________________
http://ocw.cs.pub.ro/courses/so/info/lista-discutii

Raspunde prin e-mail lui