Witam,

Potrzebowałbym pomocy w rozwiązaniu zadań

  1. Napisz program wielowątkowy z użyciem klasy Semaphore, który obsłuży model odprawy na lotnisku składający się z trzech etapów. W pierwszym z nich pasażerowie nadają bagaż rejestrowany i otrzymują kartę pokładową po przedstawieniu zakupionego biletu - na tym etapie dostępne są dwa stanowiska. Po odebraniu karty pokładowej pasażerowie mogą się udać na odprawę bezpieczeństwa, która stanowi kolejny etap odprawy przed odlotem. W celu zapewnienia sprawnej kontroli otwarto w sumie pęćc bramek. Po przejściu przez punkt kontrolny pasażerowie mogą się udać na pokład samolotu przez jedno z dwóch dostępnych wejść. W programie należy przyjąć, że na każdym stanowisku/bramce/wejściu pasażerowie obsługiwani pojedynczo. Należy również przyjąć, że nadawanie bagażu zajmuje 450ms, kontrola bezpieczeństwa 500ms, a wejście na pokład 250ms. Na rozważany lot samolotem bilety wykupiło 90 pasażerów. Działanie programu kończy się w momencie, gdy wszyscy pasażerowie znajdą się na pokładzie samolotu."

2 Napisz program z użyciem metod asynchronicznych (async). W jednej z metod należy znaleźć pary liczb bliźniaczych mniejszych od 1000 (liczby bliźniacze). Wyszukane przez program liczby należy zapisać do pliku CSV (każda para w osobnym wierszu). Na ekranie należy wypisać komunikat o tym, ze plik zapisano. W drugiej metodzie należy wczytać do tablicy od użytkownika 10 liczb całkowitych i wyznaczyć medianę. Następnie, jeśli n jest nieparzyste, medianą jest wartość obserwacji w środku. Jeśli natomiast n jest parzyste, wynikiem jest średnia arytmetyczna między dwiema środkowymi obserwacjami). Należy wypisać na ekranie obliczony wynik."

  1. Wygeneruj 50 zbiorów liczb i zapisz je w dowolnej kolekcji .Każdy zbiór ma mieć 15000 liczb wygenerowanych losowo z zakresu 0-500. Wszystkie zbiory należy posortować i zapisać
    w osobnych "plikach CSV mających w nazwach numer kolejny zbioru (czyli wynikiem będzie 50 plików z posortowanymi danymi). Zaimplementuj algorytm sortowania bąbelkowego.
    W programie wykorzystaj pętlę równoległą Foreach z klasy Parallel. Przemyśl najpierw, co należy wykonywać równolegle , aby program działał wydajniej i był poprawny.
    Po wykonanej pracy program ma wyświetlić na ekranie komunikat.

  2. Wykonaj test czasu wykonania obliczeń (dowolnych, dość złożonych) w dwóch wariantach: z użyciem pętli równoległej (For lub ForEach) oraz zwykłej pętli (for lub foreach). Szkic programu do testów:
    int start = System.Environment.TickCount;

  3. Wykonaj test czasu wykonania 2 lub 3 obliczeń (dowolnych, dość złożonych) w dwóch wariantach: z użyciem metody Parallel.Invoke oraz sekwencyjnie.

Do zadania 1 mam taki kod


using System;
using System.Threading;



namespace Program1
{
    public class Program
    {
        private static Semaphore sem;

        public static void Main()
        {
         
           
            sem = new Semaphore(0, 5);

          
            for (int i = 1; i <= 90; i++)
            {
                Thread t = new Thread(new ParameterizedThreadStart(Odprawa));
                t.Start(i);
            }
            Thread.Sleep(450);

            Console.WriteLine("Pasażerowie mogą się udać na odprawę bezpieczeństwa");
           
            sem.Release(5); 
            Console.ReadKey();
        }

        private static void Odprawa(object num)
        {
            
            Console.WriteLine("Pasażer nr {0}  nadał bagaż i otrzymał kartę pokładową", num);       
            sem.WaitOne();
            Console.WriteLine("Kontrola bezpieczeństwa dla pasażera nr {0} ", num);
            Thread.Sleep(500);   // symulacja jakiejś "pracy"
            Console.WriteLine("Pasażer nr {0} wszedl na pokład", num);
            Thread.Sleep(250);
            sem.Release();           
            Console.ReadKey();

        }
        

    }
}

Lecz kod i tak wykonuje źle kod i nie mogę dojść do tego dlaczego.

Do zadania 2 mam taki kod


using System;

public class Liczby
{

    public static void liczby_blizniacze(int n)
    {

        bool[] l_blizn = new bool[n + 1];

        for (int i = 0; i < n + 1; i++)
            l_blizn[i] = true;

  
        for (int i = 2; i <= n - 2; i++)
        {
            if (l_blizn[i] == true && l_blizn[i + 2] == true)
                Console.WriteLine("Liczby blizniacze (" + i + ", " + (i + 2) + ")");
                Console.WriteLine("Mediana (" + (i + 1) + ")");
            
        }
    }

    public static void Main()
    {
        
        int n = 1000;
        liczby_blizniacze(n);
    }

    
}

Tutaj mam taki kod i według 2 osoby ten kod nie działa poprawnie z wymogami zadania. Nie wiem jak ruszyć to zadanie metodą wymaganą w zadaniu.

W przypadku 3 zadania nie mam pojęcia jak ruszyć z kodem i w 4 oraz 5 jakby ktoś miał jakieś pomysły co do kodu to będę wdzięczny.

Proszę o wyrozumiałość ;)