Usare 'allarmi' in MATLAB

Strumenti informatici per la matematica applicata, le simulazioni, il disegno: Mathcad, Matlab, Scilab, Microcap, PSpice, AutoCad ...

Moderatori: Foto Utenteg.schgor, Foto Utentedimaios

Avatar utente
Foto UtenteIanero
8.069 5 8 11
Master EY
Master EY
Messaggi: 4320
Iscritto il: 21 mar 2012, 14:47
0
voti

[1] Usare 'allarmi' in MATLAB

Messaggioda Foto UtenteIanero » 26 feb 2022, 13:12

Ciao a tutti,
apro questa discussione perché non ho mai programmato ad oggetti in MATLAB e volevo sapere se c'è qualcuno in questo forum che l'avesse mai fatto. Il problema che vorrei approcciare me lo sono immaginato nel modo che vi descrivo di seguito, e vorrei capire quale sia il modo pulito per impostarlo in un codice MATLAB.
Mi immagino di avere distribuiti nella sfera unitaria tanti 'protagonisti' (oggetti?), ognuno dei quali è identificato dalla sua posizione (\theta,\phi) ed ha in mano un timer su cui è settato un tempo iniziale (diverso per ogni protagonista). Quando il timer si decrementa fino a raggiungere 0, il protagonista generico 'alza la mano' e deve essere servito (a meno che non ci siano state già altre alzate di mano da altri protagonisti, nel qual caso si mette in lista d'attesa e viene servito non appena possibile). Appena il 'servizio' è concluso, il suo timer torna al valore che aveva all'inizio, e ricomincia a scendere, finché non arriva di nuovo a 0, lui alza di nuovo la mano, viene servito appena possibile, e così via all'infinito...

Qualcuno che ci è già passato, può darmi qualche consiglio di 'impostazione'?
Grazie in anticipo.
:shock:

Avatar utente
Foto Utenterugweri
5.948 2 7 11
CRU - Account cancellato su Richiesta utente
Messaggi: 1366
Iscritto il: 25 nov 2016, 17:46
1
voti

[2] Re: Usare 'allarmi' in MATLAB

Messaggioda Foto Utenterugweri » 26 feb 2022, 17:39

Fondamentalmente quello che cerchi nell'ambito della programmazione concorrente è detto "semaforo", ed è una specie di "lasciapassare" per interagire con una risorsa critica, nel senso che il primo processo che lo prende può lavorare in esclusiva sulla risorsa e deve lasciarlo affinché un altro processo possa prenderlo e lavorare. In più tu potresti volere (non è ben chiaro) una specie di lista d'attesa ordinata, ma andiamo un passo per volta.

Per quanto ne so, Matlab non include un modo semplice di fare programmazione concorrente, per cui ti consiglierei di prendere il codice dei tuoi calcoli e utilizzarlo con un altro linguaggio (Python, ad esempio) che sia adeguato alla realizzazione di quel che ti interessa.

Avatar utente
Foto UtenteIanero
8.069 5 8 11
Master EY
Master EY
Messaggi: 4320
Iscritto il: 21 mar 2012, 14:47
0
voti

[3] Re: Usare 'allarmi' in MATLAB

Messaggioda Foto UtenteIanero » 26 feb 2022, 23:14

Grazie Walter,
per Python va bene, imparo se occorre. Esiste una libreria specifica che fa questo mestiere?
Per la lista ordinata si, sarebbe anch’essa una cosa molto utile.
:shock:

Avatar utente
Foto Utenterugweri
5.948 2 7 11
CRU - Account cancellato su Richiesta utente
Messaggi: 1366
Iscritto il: 25 nov 2016, 17:46
1
voti

[4] Re: Usare 'allarmi' in MATLAB

Messaggioda Foto Utenterugweri » 27 feb 2022, 0:45

Ok, allora ti dico come farei io:

- Il parallelismo lo otteniamo sparando un bel po' di thread in giro con il modulo threading della libreria standard di Python
- La lista ordinata la otteniamo con una coda multiutente, anche questa inclusa nella libreria standard di Python

Quello che facciamo è sparare tutti i thread "protagonisti" e anche un thread controllore:

- I thread protagonisti si fanno i fatti loro e quando gli scatta il timer scrivono qualcosa nella coda
- Il thread controllore fissa la coda e ogni volta che ci trova qualcosa dentro si occupa di servire il thread di cui ha letto la firma

Questa struttura di principio è semplice ed efficace, perché implementa il parallelismo in modo assolutamente intuitivo e praticamente tutto quel che riguarda la sincronizzazione viene gestito implicitamente dalla coda, quindi non devi neanche giocare con i semafori o impazzire per capire cosa hai effettivamente scritto.

Ti lascio uno script d'esempio estremamente elementare che illustra la mia idea: leggilo cercando di capire il flusso di esecuzione e se hai dubbi io sono qui :D
(P.S. se vuoi giocare un po', prova a indentare quel "time.sleep(5)" in fondo al codice principale e vedi cosa cambia ;-) )
Allegati
mtscript.zip
(565 Byte) Scaricato 177 volte

Avatar utente
Foto UtenteIanero
8.069 5 8 11
Master EY
Master EY
Messaggi: 4320
Iscritto il: 21 mar 2012, 14:47
0
voti

[5] Re: Usare 'allarmi' in MATLAB

Messaggioda Foto UtenteIanero » 27 feb 2022, 8:53

Grandissimo, grazie mille.
Dopo provo, ti faccio sapere :-) :-) :-)
:shock:


Torna a “Programmi applicativi: simulatori, CAD ed altro”