Esercizi sul multi-threading C++

Lugio

Utente Attivo
845
225
CPU
i5 6600k
Dissipatore
enermax liqmax 240
Scheda Madre
msi z170 gaming m3
HDD
seagate barracuda 1tb
RAM
hyperx fury 16gb cl14 2133hz
GPU
rx 480 8gb reference
Monitor
TV HD 32"
PSU
cx750m corsair
Case
cooler master mastercase 5
OS
windows 10 64bit
Ciao a tutti,
mi sono messo ad imparare la data race e tutto ciò che ne consegue ( lock, multi-threading, task, ecc... ) facendo piccole cavolate come esercizi.
Dopo aver finito pure quelli sono caduto nel vuoto della noia :asd: ed ho provato a bazzicare sul web, senza trovar nulla per il linguaggio da me amato.
Chiedo quindi se qualcuno di voi avrebbe in mente qualche esercizio un po' più complesso ed impergnativo, non da millemila righe di codice ma neanche da 50.
Ringrazio in anticipo per ogni risposta ed aiuto.
 

DispatchCode

Moderatore
Staff Forum
Utente Èlite
2,222
1,853
CPU
Intel I9-10900KF 3.75GHz 10x 125W
Dissipatore
Gigabyte Aorus Waterforce X360 ARGB
Scheda Madre
Asus 1200 TUF Z590-Plus Gaming ATX DDR4
HDD
1TB NVMe PCI 3.0 x4, 1TB 7200rpm 64MB SATA3
RAM
DDR4 32GB 3600MHz CL18 ARGB
GPU
Nvidia RTX 3080 10GB DDR6
Audio
Integrata 7.1 HD audio
Monitor
LG 34GN850
PSU
Gigabyte P850PM
Case
Phanteks Enthoo Evolv X ARGB
Periferiche
MSI Vigor GK30, mouse Logitech
Net
FTTH Aruba, 1Gb (effettivi: ~950Mb / ~480Mb)
OS
Windows 10 64bit / OpenSUSE Tumbleweed
Un classico potrebbe essere implementare "produttore /consumatore", dovendo anche sincronizzare i thread quindi.

Un altro magari sulle barriere.
 

Lugio

Utente Attivo
845
225
CPU
i5 6600k
Dissipatore
enermax liqmax 240
Scheda Madre
msi z170 gaming m3
HDD
seagate barracuda 1tb
RAM
hyperx fury 16gb cl14 2133hz
GPU
rx 480 8gb reference
Monitor
TV HD 32"
PSU
cx750m corsair
Case
cooler master mastercase 5
OS
windows 10 64bit
Un classico potrebbe essere implementare "produttore /consumatore", dovendo anche sincronizzare i thread quindi.

Un altro magari sulle barriere.
Sinceramente non ho capito cosa intendi in nessuno dei due casi :suicidio:.
Comunque, solo per chiarire, potete metterci di tutto, puntatori, array, vettori, classi, ecc...
 

DispatchCode

Moderatore
Staff Forum
Utente Èlite
2,222
1,853
CPU
Intel I9-10900KF 3.75GHz 10x 125W
Dissipatore
Gigabyte Aorus Waterforce X360 ARGB
Scheda Madre
Asus 1200 TUF Z590-Plus Gaming ATX DDR4
HDD
1TB NVMe PCI 3.0 x4, 1TB 7200rpm 64MB SATA3
RAM
DDR4 32GB 3600MHz CL18 ARGB
GPU
Nvidia RTX 3080 10GB DDR6
Audio
Integrata 7.1 HD audio
Monitor
LG 34GN850
PSU
Gigabyte P850PM
Case
Phanteks Enthoo Evolv X ARGB
Periferiche
MSI Vigor GK30, mouse Logitech
Net
FTTH Aruba, 1Gb (effettivi: ~950Mb / ~480Mb)
OS
Windows 10 64bit / OpenSUSE Tumbleweed
Nel primo caso si tratta di un algoritmo che usa una coda (o un normale buffer) che viene riempita dal produttore, e svuotata dal consumatore progressivamente.
In sostanza il produttore inserirà elementi nel buffer, assicurandosi di non superare il limite, ed il consumatore preleverà gli elementi assicurandosi di non rimuovere più di quanti ce ne siano.

Quello con le barriere è un problema tipico di sincronizzazione. Si tratta di elaborare dati in due thread (o più) sino al raggiungimento di un valore (la barriera) raggiunto il quale il thread che giunge a questa barriera attende gli altri.
 

Entra

oppure Accedi utilizzando
Discord Ufficiale Entra ora!