SyncLock

23/06/2004 - 09:28 por diego | Informe spam
Quisiera saber como seria la sentencia SyncLock(no
permite que otro thread se ejecute en contemporaneo).
Gracias anticipadas...

Preguntas similare

Leer las respuestas

#1 e-lores
23/06/2004 - 09:47 | Informe spam
En c# se utiliza

lock(TuObjeto)
{

}

Sin embargo esto lo único que hace es bloquear la zona de memoria de tu
objeto para que ningún otro thread pueda acceder a ella (lo que no quiere
decir que paren su ejecución)

Saludos.
Ernesto Lores.


"diego" escribió en el mensaje
news:1ff8c01c458f3$be3925d0$
Quisiera saber como seria la sentencia SyncLock(no
permite que otro thread se ejecute en contemporaneo).
Gracias anticipadas...
Respuesta Responder a este mensaje
#2 Diego
23/06/2004 - 11:21 | Informe spam
Ernesto, gracias por tu respuesta.
Te comento, que uso un objeto timer, que cada 15 segundos
ejecuta 4 procesos sincronos.

Mi problema es que cuando parte el timer es como si
hubiese otro thread que se ejecuta casi en paralelo, esto
lo pude comprobar ya que uno de los procesos me salva
datos en un db, y encontre datos duplicados. Mas aun
cuando paro el timer(entiendase
timer.stop;timer.enabled=false), los procesos continuan
ejecutandose.
La verdad estoy un poco confundido.

Tenes alguna idea del motivo de este comportamiento?

saludos,
Diego

En c# se utiliza

lock(TuObjeto)
{

}

Sin embargo esto lo único que hace es bloquear la zona de


memoria de tu
objeto para que ningún otro thread pueda acceder a ella


(lo que no quiere
decir que paren su ejecución)

Saludos.
Ernesto Lores.


"diego" escribió en


el mensaje
news:1ff8c01c458f3$be3925d0$
Quisiera saber como seria la sentencia SyncLock(no
permite que otro thread se ejecute en contemporaneo).
Gracias anticipadas...




.

Respuesta Responder a este mensaje
#3 e-lores
23/06/2004 - 12:45 | Informe spam
¿Que quieres decir con cuatro procesos sincronos?
¿Estamos hablando de procesos (Process) o de hilos (Thread) ?
Lo único que te puedo decir es que es normal que los 'procesos' (o hilos,
aun no estoy seguro) continuen aunque pares el timer.
Si me especificas un poco más intentaré ayudarte.
Ernesto Lores


"Diego" escribió en el mensaje
news:2035c01c45903$74bace30$
Ernesto, gracias por tu respuesta.
Te comento, que uso un objeto timer, que cada 15 segundos
ejecuta 4 procesos sincronos.

Mi problema es que cuando parte el timer es como si
hubiese otro thread que se ejecuta casi en paralelo, esto
lo pude comprobar ya que uno de los procesos me salva
datos en un db, y encontre datos duplicados. Mas aun
cuando paro el timer(entiendase
timer.stop;timer.enabled=false), los procesos continuan
ejecutandose.
La verdad estoy un poco confundido.

Tenes alguna idea del motivo de este comportamiento?

saludos,
Diego

En c# se utiliza

lock(TuObjeto)
{

}

Sin embargo esto lo único que hace es bloquear la zona de


memoria de tu
objeto para que ningún otro thread pueda acceder a ella


(lo que no quiere
decir que paren su ejecución)

Saludos.
Ernesto Lores.


"diego" escribió en


el mensaje
news:1ff8c01c458f3$be3925d0$
Quisiera saber como seria la sentencia SyncLock(no
permite que otro thread se ejecute en contemporaneo).
Gracias anticipadas...




.

Respuesta Responder a este mensaje
#4 Diego
23/06/2004 - 13:49 | Informe spam
¿Que quieres decir con cuatro procesos sincronos?


En realidad son normales metodos de una clase, al menos yo
no las declaro como hilos, las ejecuto normalmente:

private void timer_Tick(object sender, System.EventArgs e)
{
timer.Stop();
timer.Enabled=false;

object.metodo1();
object.metodo2();
object.metodo3();
object.metodo4();

timer.Enabled=true;
timer.Start();
}






¿Que quieres decir con cuatro procesos sincronos?
¿Estamos hablando de procesos (Process) o de hilos


(Thread) ?
Lo único que te puedo decir es que es normal que


los 'procesos' (o hilos,
aun no estoy seguro) continuen aunque pares el timer.
Si me especificas un poco más intentaré ayudarte.
Ernesto Lores


"Diego" escribió en


el mensaje
news:2035c01c45903$74bace30$
Ernesto, gracias por tu respuesta.
Te comento, que uso un objeto timer, que cada 15 segundos
ejecuta 4 procesos sincronos.

Mi problema es que cuando parte el timer es como si
hubiese otro thread que se ejecuta casi en paralelo, esto
lo pude comprobar ya que uno de los procesos me salva
datos en un db, y encontre datos duplicados. Mas aun
cuando paro el timer(entiendase
timer.stop;timer.enabled=false), los procesos continuan
ejecutandose.
La verdad estoy un poco confundido.

Tenes alguna idea del motivo de este comportamiento?

saludos,
Diego

En c# se utiliza

lock(TuObjeto)
{

}

Sin embargo esto lo único que hace es bloquear la zona de


memoria de tu
objeto para que ningún otro thread pueda acceder a ella


(lo que no quiere
decir que paren su ejecución)

Saludos.
Ernesto Lores.


"diego" escribió en


el mensaje
news:1ff8c01c458f3$be3925d0$
Quisiera saber como seria la sentencia SyncLock(no
permite que otro thread se ejecute en contemporaneo).
Gracias anticipadas...




.





.

Respuesta Responder a este mensaje
#5 Octavio Hernandez
23/06/2004 - 15:10 | Informe spam
Diego,

En el código que muestras no hay ningún " paralelismo" - metodo2() comenzará
a ejecutarse cuando termine metodo1(), y así sucesivamente...
Deberás crear cuatro hilos de ejecución, asignándole a cada uno de ellos uno
de los métodos, para que su ejecución se simultanee. Y entonces sería cuando
deberías utilizar lock() dentro de los métodos para garantizar la disciplina
de acceso a los recursos que los cuatro hilos compartan.

Lanzarlos en hilos paralelos podría ser así:

// ...
new Thread(new Delegate(objeto.metodo1)).Start();
new Thread(new Delegate(objeto.metodo2)).Start();
new Thread(new Delegate(objeto.metodo3)).Start();
new Thread(new Delegate(objeto.metodo4)).Start();
// ...

Ahora supón que dentro de 'objeto' hay un campo 'x' en el que algunos
métodos leen y otros escriben, y no se debe permitir que haya dos hilos
simultáneos tocando ese campo. Dentro de los métodos, al acceder a 'x',
deberás utilizar lock:

lock (x)
{
// trabajar con el objeto x
}

Salu2 - Octavio

"Diego" escribió en el mensaje
news:2047b01c45918$2638cb80$
¿Que quieres decir con cuatro procesos sincronos?


En realidad son normales metodos de una clase, al menos yo
no las declaro como hilos, las ejecuto normalmente:

private void timer_Tick(object sender, System.EventArgs e)
{
timer.Stop();
timer.Enabled=false;

object.metodo1();
object.metodo2();
object.metodo3();
object.metodo4();

timer.Enabled=true;
timer.Start();
}






¿Que quieres decir con cuatro procesos sincronos?
¿Estamos hablando de procesos (Process) o de hilos


(Thread) ?
Lo único que te puedo decir es que es normal que


los 'procesos' (o hilos,
aun no estoy seguro) continuen aunque pares el timer.
Si me especificas un poco más intentaré ayudarte.
Ernesto Lores


"Diego" escribió en


el mensaje
news:2035c01c45903$74bace30$
Ernesto, gracias por tu respuesta.
Te comento, que uso un objeto timer, que cada 15 segundos
ejecuta 4 procesos sincronos.

Mi problema es que cuando parte el timer es como si
hubiese otro thread que se ejecuta casi en paralelo, esto
lo pude comprobar ya que uno de los procesos me salva
datos en un db, y encontre datos duplicados. Mas aun
cuando paro el timer(entiendase
timer.stop;timer.enabled=false), los procesos continuan
ejecutandose.
La verdad estoy un poco confundido.

Tenes alguna idea del motivo de este comportamiento?

saludos,
Diego

En c# se utiliza

lock(TuObjeto)
{

}

Sin embargo esto lo único que hace es bloquear la zona de


memoria de tu
objeto para que ningún otro thread pueda acceder a ella


(lo que no quiere
decir que paren su ejecución)

Saludos.
Ernesto Lores.


"diego" escribió en


el mensaje
news:1ff8c01c458f3$be3925d0$
Quisiera saber como seria la sentencia SyncLock(no
permite que otro thread se ejecute en contemporaneo).
Gracias anticipadas...




.





.

Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida