* * * *

Privacy Policy

Blog italiano

Clicca qui se vuoi andare al blog italiano su Lazarus e il pascal.

Forum ufficiale

Se non siete riusciti a reperire l'informazione che cercavate nei nostri articoli o sul nostro forum vi consiglio di visitare il
Forum ufficiale di Lazarus in lingua inglese.

Lazarus 1.0

Trascinare un file nel programma
DB concetti fondamentali e ZeosLib
Recuperare codice HTML da pagina web
Mandare mail con Lazarus
Stabilire il sistema operativo
Esempio lista in pascal
File INI
Codice di attivazione
Realizzare programmi multilingua
Lavorare con le directory
Utilizzare Unità esterne
TTreeView
TTreeview e Menu
Generare controlli RUN-TIME
LazReport, PDF ed immagini
Intercettare tasti premuti
Ampliare Lazarus
Lazarus e la crittografia
System Tray con Lazarus
UIB: Unified Interbase
Il file: questo sconosciuto
Conferma di chiusura di un applicazione
Liste e puntatori
Overload di funzioni
Funzioni a parametri variabili
Proprietà
Conversione numerica
TImage su Form e Panel
Indy gestiore server FTP lato Client
PopUpMenu sotto Pulsante (TSpeedButton)
Direttiva $macro
Toolbar
Evidenziare voci TreeView
Visualizzare un file Html esterno
StatusBar - aggirare l'errore variabile duplicata
Da DataSource a Excel
Le permutazioni
Brute force
Indy 10 - Invio email con allegati
La gestione degli errori in Lazarus
Pascal Script
Linux + Zeos + Firebird
Dataset virtuale
Overload di operatori
Lavorare con file in formato JSON con Lazarus
Zeos ... dietro le quinte (prima parte)
Disporre le finestre in un blocco unico (come Delphi)
Aspetto retrò (Cmd Line)
Lazarus 1.0
Come interfacciare periferica twain
Ubuntu - aggiornare free pascal e lazarus
fpcup: installazioni parallele di lazarus e fpc
Free Pascal e Lazarus sul Raspberry Pi
Cifratura: breve guida all'uso dell'algoritmo BlowFish con lazarus e free pascal.
Creare un server multithread
guida all'installazione di fpc trunk da subversion in linux gentoo
Indice
DB concetti fondamentali e connessioni standard
Advanced Record Syntax
DB concetti fondamentali e DBGrid
DB concetti fondamentali e TDBEdit, TDBMemo e TDBText
Advanced Record Syntax: un esempio pratico
Superclasse form base per programmi gestionali (e non)
Superclasse form base per programmi gestionali (e non) #2 - log, exception call stack, application toolbox
Superclasse form base per programmi gestionali (e non) #3 - traduzione delle form
Superclasse form base per programmi gestionali (e non) #4 - wait animation
Un dialog per la connessione al database:TfmSimpleDbConnectionDialog
Installare lazarus su mac osx sierra
immagine docker per lavorare con lazarus e free pascal
TDD o Test-Driven Development
Benvenuto! Effettua l'accesso oppure registrati.
Aprile 29, 2024, 06:23:11 pm

Inserisci il nome utente, la password e la durata della sessione.

407 Visitatori, 0 Utenti

Autore Topic: Variabile globale in multithreading  (Letto 4856 volte)

xinyiman

  • Administrator
  • Hero Member
  • *****
  • Post: 3249
  • Karma: +12/-0
Variabile globale in multithreading
« il: Ottobre 10, 2012, 10:04:28 pm »
Ciao ragazzi, prima che ci perda del tempo qualcuno sa dirmi se le variabili globali funzionano in multithreading? Ovvero se io uso una variabile globale che quando schiaccio su un pulsante mi setta a false e così mi fa uscire da un ciclo while all'interno di un thread non principale?! Lo so mi sono spiegato come un cane...
Ieri è passato, domani è futuro, oggi è un dono...

bonmario

  • Hero Member
  • *****
  • Post: 1302
  • Karma: +10/-1
Re:Variabile globale in multithreading
« Risposta #1 il: Ottobre 11, 2012, 07:57:40 am »
Io ne ho usata una, ma l'ho dichiarata nel form.
Però, adesso che mi ci fai pensare, dovrebbe funzionatre anche una variabile globale.

Non so se è eccessivo, ma io ho creato 2 procedure: una che legge tale variabile ed una che la scrive. Entrambe le operazioni sono "soggette" alla CriticalSection.

Ciao, Mario

Stilgar

  • Global Moderator
  • Hero Member
  • *****
  • Post: 2382
  • Karma: +10/-0
Re:Variabile globale in multithreading
« Risposta #2 il: Ottobre 11, 2012, 09:47:56 pm »
Mario, quando accedi a variabili con i thread è sempre buona norma mettere un semaforo.
La critical section funge da semaforo "improprio" in questo caso. ;)
xinyiman Prova ad usare un Mutex per accedere alla variabile.In questo caso hai la garanzia che solo un thread alla volta potranno accedere a quella variabile.
Al mondo ci sono 10 tipi di persone ... chi capisce il binario e chi no.

bonmario

  • Hero Member
  • *****
  • Post: 1302
  • Karma: +10/-1
Re:Variabile globale in multithreading
« Risposta #3 il: Ottobre 12, 2012, 08:09:26 am »
Grazie del consiglio.
C'è però un problema: da quello che avevo letto, io credevo che fossero la stessa cosa ...
Saresti così paziente da spiegarmi che difefrenza c'è, in modo da poterci ragionare su la prossima volta?

Grazie, Mario

nomorelogic

  • Global Moderator
  • Hero Member
  • *****
  • Post: 2870
  • Karma: +20/-4
Re:Variabile globale in multithreading
« Risposta #4 il: Ottobre 12, 2012, 08:53:22 am »
Ciao ragazzi, prima che ci perda del tempo qualcuno sa dirmi se le variabili globali funzionano in multithreading? Ovvero se io uso una variabile globale che quando schiaccio su un pulsante mi setta a false e così mi fa uscire da un ciclo while all'interno di un thread non principale?! Lo so mi sono spiegato come un cane...

penso che l'approccio giusto sia di dichiarare una proprietà o un metodo nel thread.
quando nella GUI qualcuno schiaccia il pulsante "interrompi" il processo principale dovrebbe passarsi tutti i thread ancora in esecuzione ed impostare questa proprietà col valore che ne interrompe l'esecuzione.
un oggetto non dovrebbe dipendere da altri oggetti per quanto riguarda il suo funzionamento altrimenti viene meno la possibilità di poterlo riutilizzare.
Imagination is more important than knowledge (A.Einstein)

Stilgar

  • Global Moderator
  • Hero Member
  • *****
  • Post: 2382
  • Karma: +10/-0
Re:Variabile globale in multithreading
« Risposta #5 il: Ottobre 12, 2012, 09:50:50 am »
Nomore,
  per questo (in un'altra discussione) parlavo di gestore dei thread.
Ma è vero anche che, se devo accedere in concorrenza a una zona di memoria (che sia una porta o una risorsa condivisibile a scelta) devo applicare delle metodologie per rendermi la vita più semplice. O no;)

Mario,
 http://it.wikipedia.org/wiki/Mutex
http://it.wikipedia.org/wiki/Sezione_critica

Diciamo che la sezione critica è un concetto "astratto" (al di la che Windows fornice alcune api) il Mutex è un semaforo a slot singolo, per cui funge da controllore per sezione critica. Solo che lo getisci direttamente tu. Non deleghi al sistema operativo (e in ambito multi-platform possono cambiare i comportamenti da uno all'altro sistema operativo ;) ).
Al mondo ci sono 10 tipi di persone ... chi capisce il binario e chi no.

nomorelogic

  • Global Moderator
  • Hero Member
  • *****
  • Post: 2870
  • Karma: +20/-4
Re:Variabile globale in multithreading
« Risposta #6 il: Ottobre 12, 2012, 10:51:54 am »
Nomore,
  per questo (in un'altra discussione) parlavo di gestore dei thread.
Ma è vero anche che, se devo accedere in concorrenza a una zona di memoria (che sia una porta o una risorsa condivisibile a scelta) devo applicare delle metodologie per rendermi la vita più semplice. O no;)

poco ma sicuro, infatti in questo caso non è che ci siano alternative all'adottare un sistema che garantisca l'accesso concorrente :)

però sono sempre dell'opinione che un thread, per quanto riguarda la sua terminazione, non debba dipendere da una risorsa esterna. per spiegarmi meglio: se abbiamo N thread della stessa classe e tutti con accesso alla stessa variabile globale, devono terminare tutti?
Imagination is more important than knowledge (A.Einstein)

Stilgar

  • Global Moderator
  • Hero Member
  • *****
  • Post: 2382
  • Karma: +10/-0
Re:Variabile globale in multithreading
« Risposta #7 il: Ottobre 12, 2012, 02:48:37 pm »
hahahaha
Mi vengono in mente una miriade di battutaccie ;)
Diciamo che se la logica del programma lo prevede sì.
Al mondo ci sono 10 tipi di persone ... chi capisce il binario e chi no.

 

Recenti

How To

Utenti
Stats
  • Post in totale: 18781
  • Topic in totale: 2235
  • Online Today: 414
  • Online Ever: 900
  • (Gennaio 21, 2020, 08:17:49 pm)
Utenti Online
Users: 0
Guests: 407
Total: 407

Disclaimer:

Questo blog non rappresenta una testata giornalistica poiché viene aggiornato senza alcuna periodicità. Non può pertanto considerarsi un prodotto editoriale ai sensi della legge n. 62/2001.