Politechnika Świętokrzyska
Laboratorium programowania współbieżnego
Temat: Grupa 314A:
Salwa Rafał
C#
Data wykonania ćwiczenia: 5.12.2011 Data oddania sprawozdania: 7.12.2011
Napisać program który:
" Przepisać poniższy kod i zapisać do pliku WitajSwiecie.cs:
Program
using System;
class WitajSwiecie
{
static void Main()
{
Console.WriteLine("Witaj Świecie");
}
}
" Przepisać poniższy kod i zapisać do pliku WitajSwiecie2.cs:
//Werjsa okienkowa
using System;
using System.Windows.Forms;
class WitajSwiecie
{
static void Main()
{
Console.WriteLine("Witaj Świecie!");
MessageBox.Show("Witaj Świecie Okienkowy!");
}
}
" Wątki Przepisać poniższy kod i zapisać do pliku Watki.cs:
//Przykład tworzenia wątków
using System;
using System.Windows.Forms;
using System.Threading;
class Watki
{
static int liczbaIteracji = 10;
static void Main()
{
Console.WriteLine("Podaj liczbę wątków:");
string tekstZKonsoli = Console.ReadLine();
int liczbaWatkow =0;
try
{
liczbaWatkow = int.Parse(tekstZKonsoli);
}
catch (Exception ex)
{
Console.WriteLine("Błąd konwersji podanego tekstu do liczby: " + ex.Message);
}
Console.WriteLine("OK Stworzymy {0} wątków",liczbaWatkow);
Thread[] tablicaWatkow = new Thread[liczbaWatkow];
for (int licznik = 0;licznik
{
tablicaWatkow[licznik] = new Thread(new ThreadStart(wyswietlajCos));
tablicaWatkow[licznik].Name = "Wątek nr " + licznik.ToString();
tablicaWatkow[licznik].Start();
}
foreach (Thread watek in tablicaWatkow) //czekamy na wszystkie wątki
{
watek.Join();
}
}
static void wyswietlajCos()
{
Console.WriteLine(Thread.CurrentThread.Name + " zaczyna wyświetlać liczby:");
Random rand = new Random();
for (int ii = 0;ii{
Console.Write("{0}, ",ii); //wyświetl liczbę
Thread.Sleep(rand.Next(0,2000)); //wstrzymaj działanie na czas od 0 do 2s
}
Console.WriteLine(Thread.CurrentThread.Name + " zakończył pisać liczby.");
}
}
" Zastosować lock do powyższego przykładu
using System;
using System.Windows.Forms;
using System.Threading;
class Watki
{
static int liczbaIteracji = 10;
static object blokowacz = new object();
static Semaphore semafor = new Semaphore(1, 1);
static void Main()
{
Console.WriteLine("Podaj liczbę wątków:");
string tekstZKonsoli = Console.ReadLine();
int liczbaWatkow =0;
try
{
liczbaWatkow = int.Parse(tekstZKonsoli);
}
catch (Exception ex)
{
Console.WriteLine("Błąd konwersji podanego tekstu do liczby: " + ex.Message);
}
Console.WriteLine("OK Stworzymy {0} wątków",liczbaWatkow);
Thread[] tablicaWatkow = new Thread[liczbaWatkow];
for (int licznik = 0;licznik{
lock (blokowacz)
{
tablicaWatkow[licznik] = new Thread(new ThreadStart(wyswietlajCos));
tablicaWatkow[licznik].Name = "Wątek nr " + licznik.ToString();
tablicaWatkow[licznik].Start();
}//lock
}//for
foreach (Thread watek in tablicaWatkow) //czekamy na wszystkie wątki
{
watek.Join();
}
}
static void wyswietlajCos()
{
Console.WriteLine(Thread.CurrentThread.Name + " zaczyna pisać:");
Random rand = new Random(Thread.CurrentThread.ManagedThreadId);//inicjuj random
numerem wątka
for (int ii = 0;ii{
Console.Write("ala ");
Thread.Sleep(rand.Next(0,100)); //wstrzymaj działanie na czas od 0 do 0,1
Console.Write("ma ");
Thread.Sleep(rand.Next(0,100)); //wstrzymaj działanie na czas od 0 do 0,1
Console.WriteLine("kota " + ii);
Thread.Sleep(rand.Next(0,2000)); //wstrzymaj działanie na czas od 0 do 2s
}//for
Console.WriteLine(Thread.CurrentThread.Name + " zakończył pisać.");
}
}
" Zastosować 1 semafor tak, by każdy napis "ala ma kota" był wyświetlany w całości.
using System;
using System.Windows.Forms;
using System.Threading;
class Watki
{
static int liczbaIteracji = 10;
static object blokowacz = new object();
static Semaphore semafor = new Semaphore(1, 1);
static void Main()
{
Console.WriteLine("Podaj liczbę wątków:");
string tekstZKonsoli = Console.ReadLine();
int liczbaWatkow =0;
try
{
liczbaWatkow = int.Parse(tekstZKonsoli);
}
catch (Exception ex)
{
Console.WriteLine("Błąd konwersji podanego tekstu do liczby: " + ex.Message);
}
Console.WriteLine("OK Stworzymy {0} wątków",liczbaWatkow);
Thread[] tablicaWatkow = new Thread[liczbaWatkow];
for (int licznik = 0;licznik{
lock (blokowacz)
{
tablicaWatkow[licznik] = new Thread(new ThreadStart(wyswietlajCos));
tablicaWatkow[licznik].Name = "Wątek nr " + licznik.ToString();
tablicaWatkow[licznik].Start();
}//lock
}//for
foreach (Thread watek in tablicaWatkow) //czekamy na wszystkie wątki
{
watek.Join();
}
}
static void wyswietlajCos()
{
Console.WriteLine(Thread.CurrentThread.Name + " zaczyna pisać:");
Random rand = new Random(Thread.CurrentThread.ManagedThreadId);//inicjuj random
numerem wątka
for (int ii = 0;ii{
semafor.WaitOne();
Console.Write("ala ");
Thread.Sleep(rand.Next(0,100)); //wstrzymaj działanie na czas od 0 do 0,1
Console.Write("ma ");
Thread.Sleep(rand.Next(0,100)); //wstrzymaj działanie na czas od 0 do 0,1
Console.WriteLine("kota " + ii);
Thread.Sleep(rand.Next(0,2000)); //wstrzymaj działanie na czas od 0 do 2s
semafor.Release();
}//for
Console.WriteLine(Thread.CurrentThread.Name + " zakończył pisać.");
}
}
Powyższy program skopiować i nazwać go WatkiWH.cs. Do wątka przekazać podczas startu liczbę
typu int
using System;
using System.Windows.Forms;
using System.Threading;
class Watki
{
static int liczbaIteracji = 10;
static object obi;
static void Main()
{
Console.WriteLine("Podaj liczbę wątków:");
string tekstZKonsoli = Console.ReadLine();
int liczbaWatkow =0;
try
{
liczbaWatkow = int.Parse(tekstZKonsoli);
}
catch (Exception ex)
{
Console.WriteLine("Błąd konwersji podanego tekstu do liczby: " + ex.Message);
}
Console.WriteLine("OK Stworzymy {0} wątków",liczbaWatkow);
Thread[] tablicaWatkow = new Thread[liczbaWatkow];
for (int licznik = 0;licznik{
tablicaWatkow[licznik] = new Thread(new
ParameterizedThreadStart(wyswietlajCos));
tablicaWatkow[licznik].Name = "Wątek nr " + licznik.ToString();
tablicaWatkow[licznik].Start("4");
}
foreach (Thread watek in tablicaWatkow) //czekamy na wszystkie wątki
{
watek.Join();
}
}
private static void wyswietlajCos(object wiadomosc)
{
Console.WriteLine(Thread.CurrentThread.Name + " zaczyna pisać:");
Console.WriteLine((string)wiadmosc);
Random rand = new Random(Thread.CurrentThread.ManagedThreadId);//inicjuj random
numerem wątka
MessageBox.Show((string)wiadomosc);
for (int ii = 0;ii{
Console.Write("ala ");
Thread.Sleep(rand.Next(0,100)); //wstrzymaj działanie na czas od 0 do 0,1
Console.Write("ma ");
Thread.Sleep(rand.Next(0,100)); //wstrzymaj działanie na czas od 0 do 0,1
Console.WriteLine("kota " + ii);
Thread.Sleep(rand.Next(0,2000)); //wstrzymaj działanie na czas od 0 do 2s
}//for
Console.WriteLine(Thread.CurrentThread.Name + " zakończył pisać.");
}
}
Wnioski
Podczas wykonywania ćwiczenia nauczyłem się podstaw C# a przede wszystkim tematyki
związanej z wątkami w C#. zapoznałem sie też z kompilatorami oraz sposobami kompilacji kodów
zródłowych napisanych w C# w niektórych zadaniach trzeba było zastosować lock oraz semafory,
nie było to trudnym zadaniem ponieważ trzebabyło przede wszystkim pilnować kolejności
blokowania oraz otwierania ich.
Wyszukiwarka
Podobne podstrony:
lab9
lab9
lab9
lab9
lab9 ReadMe
lab9
lab9 ZA
I9G1S1 Nadolny Michal Lab9
sr lab9
Lab9
lab9
lab9 analiza II
09 LAB9
lab9
lab9 NHIP
Lab9 README
lab9
TM Asemb LAB9
więcej podobnych podstron