Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // zad 2
- #include <iostream>
- #include <boost/thread.hpp>
- #include <boost/thread/mutex.hpp>
- #include <boost/thread/condition_variable.hpp>
- using namespace std;
- using namespace boost;
- //globalna tablica znakow
- int globalnaTablica[20];
- //zmienna przechowujaca true/false, ktore odpowiada czy dane sa gotowe czy nie
- bool saDane = false;
- //warunek sprawdzenia danych
- boost::condition_variable warunekSaDane;
- //mutex do blokowania dancyh
- boost::mutex mutexDanych;
- class Watek{
- public:
- Watek(int n) : ile(n)
- {
- }
- //kod do wykonania
- void operator()(){
- //petla generujaca znaki
- for (int i = 0; i < ile; ++i) {
- //blokada danych
- unique_lock<mutex> blokadaDanych(mutexDanych);
- if(saDane)
- {
- warunekSaDane.wait(blokadaDanych);
- }
- globalnaTablica[i] =i*i;
- saDane = true;
- warunekSaDane.notify_one();
- }
- }
- private:
- int ile;
- };
- int main() {
- int ilosc_znakow=10;
- //stworz watek.
- boost::thread watek(Watek(10));
- for (int i = 0; i < ilosc_znakow; ++i) {
- boost::unique_lock<boost::mutex> blokadaDanych(mutexDanych);
- if(!saDane)
- {
- //cout<<".....czekam na dane"<<endl;
- //jezeli nie ma danych wtedy czekaj: wystepuje blokada watku.
- warunekSaDane.wait(blokadaDanych);
- }
- //jezeli sa dane.. po poczekaniu na nie, wypisz znak z globalnej tablicy:
- cout << i << ": " << globalnaTablica[i] << endl;
- //ustaw zmienna saDane na false, poniewaz nie ma jeszcze danych
- saDane = false;
- //Klasa condition_variable zapewnia mechanizm, dzięki któremu wątek może czekać na powiadomienie z innego wątku. Kiedy wątek budzi się z oczekiwania, sprawdza, czy odpowiedni warunek jest teraz prawdziwy i kontynuuje, jeśli tak.
- //Jeśli warunek nie jest spełniony, włókno czeka ponownie, wzywa, aby wznowić oczekiwanie.
- //W najprostszym przypadku ten warunek jest tylko zmienną logiczną:
- warunekSaDane.notify_one();
- }
- watek.join();
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement