ATPS na tecnologia
Seminário: ATPS na tecnologia. Pesquise 862.000+ trabalhos acadêmicosPor: renatokim2013 • 19/11/2013 • Seminário • 925 Palavras (4 Páginas) • 255 Visualizações
using System;
using System.Threading;
using System.Collections;
using System.Collections.Generic;
public class ExemploSemaforo
{
//DECLARACAO DO SEMAFARO
private static Semaphore Pool;
//este flag é apenas para indicar que estamos na thread
// então temos que chamar o waitOne nos métodos
private static bool flag = false;
public static void Main()
{
Console.WriteLine("Programa Iniciado");
ThreadProcessaPedido();
Console.ReadKey();
}
/// <summary>
/// Este método chama as threads
/// </summary>
private static void ThreadProcessaPedido()
{
int[] pedidos = new int[500];
Console.WriteLine("Processando Pedidos");
flag = true;
//PRIMEIRO PARAMETRO QUANTAS THREADS TEMOS LIBERADAS PARA INICIAR
//SEGUNDO PARAMETRO QUANTAS THREADS PODEMOS EXECUTAR POR VEZ
Pool = new Semaphore(5, 5);
//CRIANDO AS THREADS QUE PRODUZEM OS PEDIDOS
for (int i = 0; i < 500; i=i+10)
{
Thread t = new Thread(() => produzirPedido(pedidos, i));
t.Name = "Pedido: " + i;
t.Start();
}
//CRIANDO AS THREADS QUE PROCESSAM OS PEDIDOS
for (int i = 0; i < 490; i=i+10)
{
Thread t = new Thread(() => processarPedido(pedidos, i));
t.Name = "Pedido: " + i;
t.Start();
}
}
private static void processarPedido(int[] pedido, int id)
{
try
{
if (flag) Pool.WaitOne();
//Console.WriteLine(Thread.CurrentThread.Name + " processando.");
//espera 3 segundos antes de terminar
pedido[id] = 2;
Thread.Sleep(1000);
Console.WriteLine(Thread.CurrentThread.Name + "
...