Home Page
Articoli
Tips & Tricks
News
Forum
Archivio Forum
Blogs
Sondaggi
Rss
Video
Utenti
Chi Siamo
Contattaci
Username:
Password:
Login
Registrati ora!
Recupera Password
Home Page
Stanze Forum
.NET Framework
Thread-safe
sabato 26 maggio 2012 - 08.15
Elenco Threads
Stanze Forum
Aggiungi ai Preferiti
Cerca nel forum
Elenco Tags
C#
|
.NET 2.0
|
.NET 3.0
|
.NET 3.5
|
.NET 4.0
|
Visual Studio 2010
|
Visual Studio Express
andrestu
Profilo
| Expert
772
messaggi | Data Invio:
sab 26 mag 2012 - 08:15
salve a tutti,
per un sito web che sto sviluppando utilizzo un componente che gestisce l'upload (cute web ajax upload), nella relativa documentazione di una delle classi che formano questo componente trovo la seguente scritta:
Public static members of this type are safe for multithreaded operations. Instance members are not guaranteed to be thread-safe.
non essendo pratico di thread e relativa gestione non so interpretarla, qual'è il suo significato?
grazie...
Andrea Restucci - Web Developer
luigidibiasi
Profilo
| Guru
1.077
messaggi | Data Invio:
lun 4 giu 2012 - 09:40
>Public static members of this type are safe for multithreaded
>operations. Instance members are not guaranteed to be thread-safe.
>
ti dice che i membri pubblici della classe devono essere gestiti tramite i lock manualmente poiché non sono thread-safe
quindi, in pratica se usi più thread che vanno ad usare un oggetto condiviso potrebbero accadere guai
(i metodi vanno utilizzati da un thread per volta in mutua esclusione)
se utilizzi più thread assicurati di utilizzare SynLock sull'oggetto (se usi VB) prima di richiamarne i metodi...
Se usi c# crei un lock globale e lo usi prima di ogni chiamata a metodo di quella classe
Luigi Di Biasi
http://www.dibiasi.it/
http://netsell.dibiasi.it
- ecomm software -
http://blogs.dotnethell.it/luigidibiasi/
http://yadamp.unisa.it/
- YADAMP CMS -
andrestu
Profilo
| Expert
772
messaggi | Data Invio:
lun 4 giu 2012 - 15:29
Grazie della risposta,
ma vorrei capirci meglio.
L'oggetto in questione è un controllo adibito al upload, il controllo espone degli eventi che vengono utilizzati per gestire il processo di upload, quindi all'interno di questi eventi posso accedere ai file uploadati (concedimi il termine) e alle relative proprietà.
A questo punto deduco che se è un controllo viene inizializzato insieme al resto della pagina e quindi non dovrebbe essere un oggetto condiviso giusto?
Andrea Restucci - Web Developer
luigidibiasi
Profilo
| Guru
1.077
messaggi | Data Invio:
lun 4 giu 2012 - 15:40
>L'oggetto in questione è un controllo adibito al upload, il controllo
>espone degli eventi che vengono utilizzati per gestire il processo
>di upload, quindi all'interno di questi eventi posso accedere
>ai file uploadati (concedimi il termine) e alle relative proprietà.
fin qui ok
il problema può nascere in diversi casi:
- hai più thread che richiamano i metodi dell'oggetto in contemporanea. Questa eventualità è possibilissima, basta che due utenti iniziano ad uploadare due file in contemporanea.
- hai più thread che vanno a "modificare" (non a leggere) le proprietà nell'oggetto.
da come presumo, gli eventi ti servono per determinare lo stato dell'upload giusto?
>A questo punto deduco che se è un controllo viene inizializzato
>insieme al resto della pagina e quindi non dovrebbe essere un
>oggetto condiviso giusto?
Se il controllo è messo nella pagina "dovrebbe" risultare privato e quindi legato alla singola sessione utente. (e non darti problemi)
Però, tu non sai come è stato realmente implementato internamente (potrebbe far riferimento ad esempio sempre allo stesso buffer temporaneo)... e dato che esce fuori quel messaggio ti conviene usare un lock (tanto a meno di non prevedere centinaia di upload al secondo non ti degrada le prestazioni)
>>MOD:
SCUSAMI:
ho riletto solo ora bene
>Public static members of this type are safe for multithreaded operations.
quindi è thread safe se usato staticamente!!
>Instance members are not guaranteed to be thread-safe.
tu mica fai tipoOggetto x = new tipoOggetto() per usarlo?
Luigi Di Biasi
http://www.dibiasi.it/
http://netsell.dibiasi.it
- ecomm software -
http://blogs.dotnethell.it/luigidibiasi/
http://yadamp.unisa.it/
- YADAMP CMS -
andrestu
Profilo
| Expert
772
messaggi | Data Invio:
lun 4 giu 2012 - 16:03
allora, io non costruisco l'oggetto da code-behind ma lo inserisco all'interno della pagina Aspx come tutti gli altri controlli.
- inserire un controllo nella pagina aspx (per capirci <asp:button runat="server" ...) oppure tramite code-behind (Button mybutt = new Button();) non è la stessa cosa?
alla fine viene sempre chiamato il costruttore per l'inizializzzione dell'oggetto giusto?
- è possibile che in questo caso l'implementazione del controllo è un oggetto statico? in questo caso avrebbero senso le indicazioni...
- altra cosa è che i file vengono temporaneamanete salvati con un nome costruito da un guid + nome reale del file, quindi presumo che siano state previste operazioni multi-thread contemporanee...
Andrea Restucci - Web Developer
Torna su
Stanze Forum
Elenco Threads
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?
Dopo esserti registrato potrai chiedere
aiuto sul nostro
Forum
oppure aiutare gli altri
Consulta le
Stanze
disponibili.
Registrati ora !