Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Mensajes - ~ Yoya ~

#61
Da mucha pena ver personas tan toxicas como la mayorías que comentaron en el hilo.

Sigan pensando asi, y no lograran nada importante en sus vidas.

Saludos y vivan los millones jejeje.

PD: Estoy con el millonario
#62
Cita de: xoker en 26 Enero 2014, 19:29 PM

Desde el inicio el codigo que tengo en mi PC funciona perfectamente (al copiarlo me puse una llave de mas, error mio que ni siquiera sabia que habia puesto y que imagino que nadie se dio cuenta al principio hasta que lo mencionaste mas tarde)


Como voy a adivinar el codigo que tiene errores logico si lo pegas mal... Sigo las indicaciones que me das para saber como tienes el codigo, la das mal y luego dices que es mi código  :rolleyes:



Cita de: xoker en 26 Enero 2014, 19:29 PM
Esto se estudia al comienzo en la universidad, lo se porque en segundo de carrera estoy cursando una asignatura sobre paralelismo y todos lo hacemos al principio... y con el tiempo, ves la burrada que significa.

Brother, tengo mas de 4 años programando, tengo la certificación de OCPJP (Oracle Certified Professional, Java Programmer), voy a tomar muy pronto si dios quiere la certificación OCPJBCD (Oracle Certified Expert, Java EE 6 Enterprise JavaBeans Developer), trabajo como Java EE Developer & PHP Developer, y me vas a salir con eso de la universidad...

Si comienzas a depurar el codigo, observas como se comporta sabrás todas las respuesta a tus preguntas. Pero todavía no entiendo porque no lo haz hecho

Saludos.
#63
 
Cita de: xoker en 24 Enero 2014, 21:22 PM
//Supongamos que antes se ha declarado esto:
//Object cerrojo = new Object();

switch(tipoHilo){
       case 0:
        for(int i=0; i<nVueltas; i++)
        synchronized(cerrojo){ n=n+1;}; // <--- Cambio de cerrojo
        break;
       case 1:
        for(int i=0; i<nVueltas; i++){
        synchronized(cerrojo){n=n-1;}; // <--- Cambio de cerrojo
        break;
     }


Si dices eso, donde debo poner ese código?? según tu comentario antes del switch, porque no vas a declarar un atributo estático dentro de un método. Me dices que lo coloque antes del switch, posteo el codigo de como debe quedar segun usted y luego me dices que el codigo es mio y que es una bestia jejeje

Yo hasta ahora he tratado simular tu código porque nomas haz puesto código que no funcionan, malas indicaciones, o simplemente que funcionan pero estan mal hecho, y encima pones que mis codigo son bestiales y lo único que he hecho es seguir sus indicaciones para tratar de dar con el código que suyo que no funciona y que hasta ahora es que lo agrega al topic, para poder ver el problema y mirar que pasa... Pero el codigo malo que tienes me dices con son míos. Y en este punto es que haz puesto el código que deberías haber puesto al principio del hilo.

Men si eres tan buen programador, entonce hubieras arreglado y encontrado la razón porque pasa lo que pasa, ya que simplemente el error es básico.

Saludos y debuguea.
#64
Me hubiera alegrado que en vez de decir que entiendes mi código, hubieras dicho que entiendes y comprendes la definiciones que deje...



Brother, tu código no funciona con "cerrojo" del tipo int o de cualquier tipo. Tu codigo debe imprimir 0, ya que primero se incrementa a 10,000 y luego descrementa a 0, en cambio retorna 10,000.

Otra cosa, las definiciones no es para que entiendas mi código, el código que puse es lo de menos pero te haz centrado hay. Las definiciones que deje es para que entiendas que si varios threads están modificando el mismo recurso a la vez, te causara conflictos.

Citarswitch(tipoHilo){
        case 0:
           for(int i=0; i<nVueltas; i++)
              synchronized(cerrojo){ n=n+1;}; // <--- Cambio de cerrojo
           break;
        case 1:
           for(int i=0; i<nVueltas; i++){
              synchronized(cerrojo){n=n-1;}; // <--- Cambio de cerrojo
           break;
      }

Por la llave del case 1 después del for, hace que se ejecute el for 1 vez, ya que va a procesar el break porque este esta dentro de la llaves.



Aqui esta el famoso codigo con cerrojo del tipo objeto,mira que no funciona:

Código (java,14,17,18,21,22) [Seleccionar]
package main;


public class Hilo extends Thread {
    private int tipoHilo;
    private  static Integer n = new Integer(0);
    private int nVueltas;

    public Hilo(int nVueltas, int tipoHilo)
    {this.nVueltas=nVueltas; this.tipoHilo=tipoHilo;}

    public void run()
    {
      Object cerrojo = new Object();
      switch(tipoHilo){
        case 0:
        for(int i=0; i<nVueltas; i++)
        synchronized(cerrojo){ n=n+1;};
        break;
        case 1:
        for(int i=0; i<nVueltas; i++)
        synchronized(cerrojo){n=n-1;};
        break;
      }
    }

  public static void main(String[] args)
      throws Exception
  {
      Hilo p = new Hilo(10000, 0);
      Hilo q = new Hilo(10000, 1);
      p.start();
      q.start();
      p.join();
      q.join();
      System.out.println(n);
  }

}
#65
Lo importante, es hacer las cosas bien, entender porque todo esta donde esta. Toma el IDE, y debuguea el codigo y observa como se comporta.

Te recomiendo que trates de leer esta parte:
Cita de: ~ Yoya ~ en 19 Enero 2014, 22:53 PM
La razón porque al principio no funcionaba es porque habías puesto el keyword synchronized dentro del un loop. Cuando se iniciaba un ciclo en el loop, uno de los 2 thread tomaba el lock y el otro esperaba a que liberen el lock.

El problema esta en que el lock se libera cuando termina cada ciclo (son 10,000 ciclos como haz indicado), y puede pasar 2 cosas:

  • El thread que habia tomado el lock toma el lock de nuevo
  • El thread que estaba esperando que liberen el lock toma el lock.

Por lo tanto, en un momento la variable se puede incrementar y en el siguiente puede que disminuya, y en el siguiente puede incrementarse o disminuirse, y asi.



CitarA read / write lock is more sophisticated lock than the Lock implementations shown in the text Locks in Java. Imagine you have an application that reads and writes some resource, but writing it is not done as much as reading it is. Two threads reading the same resource does not cause problems for each other, so multiple threads that want to read the resource are granted access at the same time, overlapping. But, if a single thread wants to write to the resource, no other reads nor writes must be in progress at the same time

Cita de: wikipediaIn computer science, the first and second readers-writers problems are examples of a common computing problem in concurrency. The two problems deal with situations in which many threads must access the same shared memory at one time, some reading and some writing, with the natural constraint that no process may access the share for reading or writing while another process is in the act of writing to it. (In particular, it is allowed for two or more readers to access the share at the same time.)

Cita de: wikipediaLa seguridad en hilos es un concepto de programación aplicable en el contexto de los programas multihilos. Una pieza de código es segura en cuanto a los hilos si funciona correctamente durante la ejecución simultánea de múltiples hilos. En particular, debe satisfacer la necesidad de que múltiples hilos accedan a los mismos datos compartidos, y la necesidad de que una pieza compartida de datos sea accedida por solo un hilo en un momento dado.

Saludos.
#66
Windows / Re: Windows 8, mi punto de vista...
22 Enero 2014, 16:14 PM
Yo lo tengo en mi portatil y en mi desktop, en ambas la 8.1.

Diseño simple, limpio y elegante. Mi estilo  ;D

Saludos.
#67
Foro Libre / Re: Marianas Web
20 Enero 2014, 19:45 PM
Gran explicación @drvy, la verdad que existe muchas supersticiones sobre la deep web, como los super hackers y eso, pero es mas ignorancia que otra cosa. Ya que si llevamos todo al contexto técnico, tendremos una idea de como funciona...

Saludos.
#68
Fixed

Código (java,13) [Seleccionar]

public class Hilo extends Thread {
private int tipoHilo;
private static Integer n = new Integer(0);
private int nVueltas;

public Hilo(int nVueltas, int tipoHilo) {
this.nVueltas = nVueltas;
this.tipoHilo = tipoHilo;
}

public void run() {

synchronized (n) {

switch (tipoHilo) {
case 0:
for (int i = 0; i < nVueltas; i++)
n = n + 1;

;
break;
case 1:
for (int i = 0; i < nVueltas; i++)
n = n - 1;
;
break;
}
}
}

public static void main(String[] args) throws Exception {
Hilo p = new Hilo(10000, 0);
Hilo q = new Hilo(10000, 1);
p.start();
q.start();
p.join();
q.join();
System.out.println(n);
}

}


La razón porque al principio no funcionaba es porque habías puesto el keyword synchronized dentro del un loop. Cuando se iniciaba un ciclo en el loop, uno de los 2 thread tomaba el lock y el otro esperaba a que liberen el lock.

El problema esta en que el lock se libera cuando termina cada ciclo (son 10,000 ciclos como haz indicado), y puede pasar 2 cosas:

  • El thread que habia tomado el lock toma el lock de nuevo
  • El thread que estaba esperando que liberen el lock toma el lock.

Por lo tanto, en un momento la variable se puede incrementar y en el siguiente puede que disminuya, y en el siguiente puede incrementarse o disminuirse, y asi.

Ahora al poner el keyword al inicio de todo el metodo, el lock se libera solo cuando el metodo se termine de ejecutar, y cuando se termina de ejecutar, entonce el segundo thread puede tomar el lock ya que se ha liberado.

Saludos.

#69
Lo mejor que puedes hacer es intentar crear otro dominio utilizando asadmin y luego configurarlo de nuevo con eclipse haber si funciona con el nuevo dominio. Si te da el mismo error,  prueba dándole permiso todos los permisos (777) al dominio nuevo y todos sus archivos y sub directorios (chmod -R 777 domain).

Saludos.
#70
La clave esta en la data que recibe la aplicación proveniente del usuario. Tienes que buscar en que parte de la aplicación utiliza la data que envía el usuario y entender como se maneja dicha data. Y luego con creatividad y lógica podrás sacar algún vector de ataque.

Saludos.