• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Semafory- dodawanie

Object Storage Arubacloud
0 głosów
232 wizyt
pytanie zadane 4 listopada 2019 w Java przez olimpiqem Nowicjusz (120 p.)
edycja 4 listopada 2019 przez olimpiqem
/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */

import java.util.concurrent.Semaphore;
/**
 *
 * @author ZTI
 */
/********************************
* Zadanie polega na zsynchronizowaniu wątków P1, P2, P3 oraz P4
* tak aby suma zmiennych A, B i C wyświetlana w wątku P4 osiągnęła 
* określoną wartość (same zmienne mogą mieć wartości dowolne, ale sumujące się do zadanej).
* UWAGA: Wykonanie kodu klasy nie powinno się kończyć blokadą tzn. 
* wszystkie wątki powinny zakończyć swoje działanie, 
* nawet jeśli watek P4 zakończy się wcześniej.
* Powyższe zachowanie należy zapewnić używając jak najmniejszej liczby semaforów.
* Zestawy zadań (zawierają dwie wartości sumy):
1) 16, 60
2) 21, 56
3) 22, 46
4) 26, 40
5) 30, 36
6) 36, 30
7) 40, 22
8) 46, 26
9) 56, 16
10) 60, 21
11) 16, 46
12) 21, 40
13) 22, 36
14) 26, 30
15) 30, 60
16) 36, 56
17) 40, 16
18) 46, 21
19) 56, 22
20) 60, 26
**********************************/
public class Zad_EP {

    private static int A = 0;
    private static int B = 0;
    private static int C = 3;
    
    private static final Semaphore NONAME = new Semaphore(1, true);

    public static void main(String[] args) {
        new P1().start();
        new P2().start();
        new P3().start();
        new P4().start();
    }

    private static final class P1 extends Thread {

        @Override
        public void run() {
            try {

                A = 10;

                B = B + 5;

                C = C + A;

                Thread.sleep(0);
                System.out.println("Thread P1 is done...");

            } catch (InterruptedException ex) {
                System.out.println("Ooops...");
                Thread.currentThread().interrupt();
                throw new RuntimeException(ex);
            }
        }
    }

    private static final class P2 extends Thread {

        @Override
        public void run() {
            try {

                B = B + C;

                A = A + B;

                Thread.sleep(0);

                System.out.println("Thread P2 is done...");

            } catch (InterruptedException ex) {
                System.out.println("Ooops...");
                Thread.currentThread().interrupt();
                throw new RuntimeException(ex);
            }
        }
    }

    private static final class P3 extends Thread {

        @Override
        public void run() {
            try {

                C = B + 10;

                A = 2 * A;

                B = B + A;

                Thread.sleep(0);
                System.out.println("Thread P3 is done...");

            } catch (InterruptedException ex) {
                System.out.println("Ooops...");
                Thread.currentThread().interrupt();
                throw new RuntimeException(ex);
            }
        }
    }

    private static final class P4 extends Thread {

        @Override
        public void run() {
            try {

                System.out.println("Sum result: " + A + " + " + B + " + " + C + " = " + (A + B + C));

                Thread.sleep(0);
                System.out.println("Thread P4 is done...");

            } catch (InterruptedException ex) {
                System.out.println("Ooops...");
                Thread.currentThread().interrupt();
                throw new RuntimeException(ex);
            }
        }
    }

    
}

Pomógłby mi ktoś wykonać jeden przykład abym zrozumiał na czym polegają semafory?
Z tego co się dowiedziałem należy dodać kilka dodatkowych semaforów.
Niestety byłem chory na zajęciach i mam problem to odrobić. 

Zaloguj lub zarejestruj się, aby odpowiedzieć na to pytanie.

Podobne pytania

0 głosów
1 odpowiedź 2,903 wizyt
pytanie zadane 10 kwietnia 2019 w Java przez mn130496 Gaduła (3,530 p.)
0 głosów
0 odpowiedzi 179 wizyt
pytanie zadane 8 listopada 2022 w Java przez CanoNee Nowicjusz (230 p.)
0 głosów
1 odpowiedź 914 wizyt

92,552 zapytań

141,399 odpowiedzi

319,533 komentarzy

61,938 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...