none
multihilos RRS feed

  • Pregunta

  • hola me podrian ayudar con mi programa no se como insertar un metodo para deposito random y numerar los thread

    using System;
    using System.Threading;
    
    namespace proyhilobanco
    {
        class Program
        {
            public class cuenta
            {
                private readonly Object bloqueo = new Object();
                private int saldo;
                Random alealtorio = new Random();
    
                public cuenta(int saldoini)
                {
                    saldo = saldoini;
    
                }
                public int Retiro(int cantidad)
                {
    
                    if (saldo <  0)
                    {
                        throw new Exception("Saldo Negativo.");
                    }
    
                    // Sección crítica. Sólo se permite una transacción
    
                    // de retiro de forma simultánea:
    
                    lock (bloqueo)
                    {
    
                        if (saldo >= cantidad)
                        {
    
                            Console.WriteLine("Saldo antes del retiro: {0}",
                            saldo.ToString());
    
                            Console.WriteLine("Cantidad a retirar: -{0}",
                            cantidad.ToString());
    
                            saldo
                            -= cantidad;
    
                            Console.WriteLine("Saldo después del retiro: {0}",
                            saldo.ToString());
    
                            return
                            cantidad;
                        }
                        else
                        {
                            return 0;
                        }
                    }
                }
    
                public void RealizarTransaccion()
                {
                    for (int i = 1; i <= 100; ++i)
                    {
                        // Realiza retiros entre 1 y 100 unidades monetarias:
                        Retiro(alealtorio.Next(1, 101));
                    }
                }
            }
    
            static void Main(string[] args)
            {
                Thread[] threads = new Thread[10];
                cuenta c = new cuenta(1000);
                for (int i = 0; i < 10; ++i)
                {
                    Thread t = new Thread(new ThreadStart(c.RealizarTransaccion));
                    threads[i] = t;
                }
                // Inicia los threads para ejecución simultánea:
                for (int i = 0; i < 10; ++i)
                {
                    threads[i].Start();
                }
                Console.WriteLine();
                Console.ReadKey();
            }
    
        }
    } 



    FAHS





    domingo, 31 de marzo de 2019 3:43

Respuestas

  • Si únicamente quieres distinguir unos threads de otros y no necesitas que la numeración sea consecutiva, entonces puedes escribir el ID del thread así:

    Console.WriteLine("El threads {0} depositó {1}", Thread.CurrentThread.ManagedThreadId, cantidad);

    Si eso no te sirve, sino que quieres los threads numerados del 1 al 10, te sugiero meter el nombre del Thread en la propiedad Name. Eso se hace al crear los hilos:

    Thread t = new Thread(new ThreadStart(c.RealizarTransaccion));
    t.Name = "Hilo " + i;
    threads[i] = t;

    y luego lo escribes asi:

    Console.WriteLine("El {0} depositó {1}", Thread.CurrentThread.Name, cantidad);


    miércoles, 3 de abril de 2019 13:34
    Moderador

Todas las respuestas

  • Hola. Qué problema tienes? Te funciona tu programa pero quieres "pintar" en consola el id del hilo? 

    Si se solucionó tu consulta no olvides marcar la respuesta. Si te ayudó, vótala como útil. Saludos

    domingo, 31 de marzo de 2019 14:36
    Moderador
    • si quiero que al momento de ejecutar diga el threads 1 deposito 100 o el threads 1 retiro 100 

    FAHS

    lunes, 1 de abril de 2019 0:53
  • Si únicamente quieres distinguir unos threads de otros y no necesitas que la numeración sea consecutiva, entonces puedes escribir el ID del thread así:

    Console.WriteLine("El threads {0} depositó {1}", Thread.CurrentThread.ManagedThreadId, cantidad);

    Si eso no te sirve, sino que quieres los threads numerados del 1 al 10, te sugiero meter el nombre del Thread en la propiedad Name. Eso se hace al crear los hilos:

    Thread t = new Thread(new ThreadStart(c.RealizarTransaccion));
    t.Name = "Hilo " + i;
    threads[i] = t;

    y luego lo escribes asi:

    Console.WriteLine("El {0} depositó {1}", Thread.CurrentThread.Name, cantidad);


    miércoles, 3 de abril de 2019 13:34
    Moderador