Sincronización...

17/03/2005 - 00:54 por Kravek | Informe spam
Como se maneja la concurrencia en VB .Net y en .Net en general?

He buscado algo y he encontrado: Mutex pero esto son recursos del sistema
operativo y la sentencia synclock que requiere UNA CLASE y no una variable.

Mi intención no es hacer una aplicación concurrente (de momento) sino que
estoy diseñando una clase "Arbol" que más adelante podrá ser usada por
programas concurrentes por lo que necesito que cuando hago ciertas
operaciones no se puedan hacer otras (tengo una variable que es el número de
nodos y claro no puedo tocarla desde varios sitios al tiempo y más si como
es mi caso en algunas funciones tengo bucles que si durante su ejecución me
eliminan un nodo podría dar una excepción)

Gracias!!

Preguntas similare

Leer las respuestas

#1 Eduardo A. Morcillo [MS MVP VB]
17/03/2005 - 03:34 | Informe spam
SyncLock lo que necesita es una expresion que devuelva un tipo por
referencia que puede ser una variable. Crear una variable de tipo Object a
nivel de clase y usala para la sincronizacion. Algo asi:

Public Class MiClase

Private _lock As New Object
private _contador as integer

Public Sub Sumar()

SyncLock _lock
_contador += 1
End SyncLock

End Sub

Public Sub Restar()

SyncLock _lock
_contador -= 1
End SyncLock

End Sub

End Class

En caso de que te interese, SyncLock es convertido por el compilador a una
llamada a System.Thread.Monitor.Enter (y una llamada al metodo Exit para el
End SyncLock)

Eduardo A. Morcillo [MS MVP VB]
http://www.mvps.org/emorcillo
https://mvp.support.microsoft.com/p...4EF5A4191C

Inteligencia militar son dos términos contradictorios.
Groucho Marx
Respuesta Responder a este mensaje
#2 Kravek
17/03/2005 - 13:42 | Informe spam
Muchas gracias, efectivamente era eso lo que necesitaba;) y no se me ocurrió
usar el tipo Object... en JAVA ocurre algo parecido ya que no puedes
bloquear valores "int" pero al existir la clase Integer que lo recubre pues
si que tira...

Lo de Thread.monitor no lo voy a usar al menos de momento porque como te
comenté la clase es monohilo pero cuando la use en programas multihilos
seguro que si lo uso;)


"Eduardo A. Morcillo [MS MVP VB]" <emorcilloATmvps.org> escribió en el
mensaje news:
SyncLock lo que necesita es una expresion que devuelva un tipo por
referencia que puede ser una variable. Crear una variable de tipo Object a
nivel de clase y usala para la sincronizacion. Algo asi:

Public Class MiClase

Private _lock As New Object
private _contador as integer

Public Sub Sumar()

SyncLock _lock
_contador += 1
End SyncLock

End Sub

Public Sub Restar()

SyncLock _lock
_contador -= 1
End SyncLock

End Sub

End Class

En caso de que te interese, SyncLock es convertido por el compilador a una
llamada a System.Thread.Monitor.Enter (y una llamada al metodo Exit para
el
End SyncLock)

Eduardo A. Morcillo [MS MVP VB]
http://www.mvps.org/emorcillo
https://mvp.support.microsoft.com/p...4EF5A4191C

Inteligencia militar son dos términos contradictorios.
Groucho Marx


email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida