Principales respuestas
multihilos

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
- Editado FRANCK8299 domingo, 31 de marzo de 2019 3:51
- Editado Sergio ParraModerator domingo, 31 de marzo de 2019 11:34 formatear codigo fuente
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);
- Editado Alberto PoblacionMVP, Moderator miércoles, 3 de abril de 2019 13:37
- Propuesto como respuesta Sergio ParraModerator miércoles, 3 de abril de 2019 13:39
- Marcado como respuesta FRANCK8299 miércoles, 3 de abril de 2019 23:31
Todas las 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);
- Editado Alberto PoblacionMVP, Moderator miércoles, 3 de abril de 2019 13:37
- Propuesto como respuesta Sergio ParraModerator miércoles, 3 de abril de 2019 13:39
- Marcado como respuesta FRANCK8299 miércoles, 3 de abril de 2019 23:31