<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="sr">
	<id>https://siwiki.rs/w/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Brka</id>
	<title>SI Wiki - Кориснички доприноси [sr]</title>
	<link rel="self" type="application/atom+xml" href="https://siwiki.rs/w/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Brka"/>
	<link rel="alternate" type="text/html" href="https://siwiki.rs/wiki/%D0%9F%D0%BE%D1%81%D0%B5%D0%B1%D0%BD%D0%BE:%D0%94%D0%BE%D0%BF%D1%80%D0%B8%D0%BD%D0%BE%D1%81%D0%B8/Brka"/>
	<updated>2026-06-04T06:00:45Z</updated>
	<subtitle>Кориснички доприноси</subtitle>
	<generator>MediaWiki 1.39.8</generator>
	<entry>
		<id>https://siwiki.rs/w/index.php?title=%D0%9F%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D1%81%D0%BA%D0%B8_%D0%BF%D1%80%D0%B5%D0%B2%D0%BE%D0%B4%D0%B8%D0%BE%D1%86%D0%B8_1/%D0%A4%D0%B5%D0%B1%D1%80%D1%83%D0%B0%D1%80_2021&amp;diff=5210</id>
		<title>Програмски преводиоци 1/Фебруар 2021</title>
		<link rel="alternate" type="text/html" href="https://siwiki.rs/w/index.php?title=%D0%9F%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D1%81%D0%BA%D0%B8_%D0%BF%D1%80%D0%B5%D0%B2%D0%BE%D0%B4%D0%B8%D0%BE%D1%86%D0%B8_1/%D0%A4%D0%B5%D0%B1%D1%80%D1%83%D0%B0%D1%80_2021&amp;diff=5210"/>
		<updated>2023-01-15T20:54:53Z</updated>

		<summary type="html">&lt;p&gt;Brka: Ispravka 5. zadatak u 8. redu&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{tocright}}&lt;br /&gt;
&#039;&#039;&#039;Ispit u februarskom roku 2021. godine&#039;&#039;&#039; održan je 12. februara. Postavka roka je dostupna [http://ir4pp1.etf.rs/Rokovi/2020-2021/pp1-2021-februar-ispit.pdf sa stranice predmeta.]&lt;br /&gt;
&lt;br /&gt;
== 1. zadatak ==&lt;br /&gt;
=== Postavka ===&lt;br /&gt;
Data je sekvenca od nula ili više promenljivih razdvojenih zarezima. Svaka promenljiva predstavlja niz od jednog ili više znakova, počinje obavezno malim slovom, nakon čega može doći prozvoljan broj znakova iz skupa koji čine mala slova, cifre i specijalni karakter &amp;quot;_&amp;quot;.&lt;br /&gt;
&amp;lt;div class=&amp;quot;abc-list&amp;quot;&amp;gt;&lt;br /&gt;
# Napisati regularni izraz koji opisuje navedenu sekvencu.&lt;br /&gt;
# Na osnovu regularnog izraza pod a) formirati minimalni DKA korišćenjem metoda pozicije.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Rešenje ===&lt;br /&gt;
[[Датотека:PPR februar 2022 zadatak 1 stablo.svg|thumb|Sintaksno stablo u prvom zadatku.]]&lt;br /&gt;
Regularni izraz koji prepoznaje ovu sekvencu može biti &amp;lt;code&amp;gt;(mo*(,mo*)*|)&amp;lt;/code&amp;gt;, gde je &amp;lt;code&amp;gt;m&amp;lt;/code&amp;gt; oznaka za malo slovo a &amp;lt;code&amp;gt;o&amp;lt;/code&amp;gt; oznaka za mala slova, velika slova i donju crtu.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ Tabela sledećih pozicija&lt;br /&gt;
! 1&lt;br /&gt;
| 2, 3, 6&lt;br /&gt;
|-&lt;br /&gt;
! 2&lt;br /&gt;
| 2, 3, 6&lt;br /&gt;
|-&lt;br /&gt;
! 3&lt;br /&gt;
| 4&lt;br /&gt;
|-&lt;br /&gt;
! 4&lt;br /&gt;
| 3, 5, 6&lt;br /&gt;
|-&lt;br /&gt;
! 5&lt;br /&gt;
| 3, 5, 6&lt;br /&gt;
|-&lt;br /&gt;
! 6&lt;br /&gt;
| -&lt;br /&gt;
|}&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ Pretvaranje nedeterminističkog konačnog automata u deterministički&lt;br /&gt;
!         !! m       !! o       !! , !! Prihvata&lt;br /&gt;
|-&lt;br /&gt;
| → 1, 6  || 2, 3, 6 ||         ||   || 1&lt;br /&gt;
|-&lt;br /&gt;
| 2, 3, 6 ||         || 2, 3, 6 || 4 || 1&lt;br /&gt;
|-&lt;br /&gt;
| 4       || 3, 5, 6 ||         ||   || 0&lt;br /&gt;
|-&lt;br /&gt;
| 3, 5, 6 ||         || 3, 5, 6 || 4 || 1&lt;br /&gt;
|}&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ Deterministički konačni automat&lt;br /&gt;
!     !! m !! o !! , !! Prihvata&lt;br /&gt;
|-&lt;br /&gt;
| → A || B ||   ||   || 1&lt;br /&gt;
|-&lt;br /&gt;
| B   ||   || B || C || 1&lt;br /&gt;
|-&lt;br /&gt;
| C   || D ||   ||   || 0&lt;br /&gt;
|-&lt;br /&gt;
| D   ||   || D || C || 1&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== 2. zadatak ==&lt;br /&gt;
=== Postavka ===&lt;br /&gt;
Za datu gramatiku&lt;br /&gt;
# &amp;amp;lt;S&amp;gt; → &amp;amp;lt;A&amp;gt; &amp;amp;lt;S&amp;gt;&lt;br /&gt;
# &amp;amp;lt;S&amp;gt; → ε&lt;br /&gt;
# &amp;amp;lt;A&amp;gt; → &amp;amp;lt;B&amp;gt; b &amp;amp;lt;B&amp;gt; c&lt;br /&gt;
# &amp;amp;lt;A&amp;gt; → &amp;amp;lt;C&amp;gt; c &amp;amp;lt;B&amp;gt;&lt;br /&gt;
# &amp;amp;lt;B&amp;gt; → a &amp;amp;lt;D&amp;gt;&lt;br /&gt;
# &amp;amp;lt;C&amp;gt; → a &amp;amp;lt;D&amp;gt;&lt;br /&gt;
# &amp;amp;lt;D&amp;gt; → ε&lt;br /&gt;
&amp;lt;div class=&amp;quot;abc-list&amp;quot;&amp;gt;&lt;br /&gt;
# Nacrtati stanje ∇ karakterističnog LR(0) automata i vrstu ∇ kontrolne tabele SLR(1) parsera. Ima li konflikata?&lt;br /&gt;
# Nacrtati stanje ∇ karakterističnog LALR(1) automata i vrstu ∇ kontrolne tabele LALR(1) parsera. Ima li konflikata?&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
Napomena: ne crtati ostatak karakterističnog automata, niti ostatak kontrolne tabele.&lt;br /&gt;
&lt;br /&gt;
=== Rešenje ===&lt;br /&gt;
Stanje ∇ sadrži u sebi sledeće smene:&lt;br /&gt;
* &amp;amp;lt;S&#039;&amp;gt; → • &amp;amp;lt;S&amp;gt; ─┤, {}&lt;br /&gt;
* &amp;amp;lt;S&amp;gt; → • &amp;amp;lt;A&amp;gt; &amp;amp;lt;S&amp;gt;, {─┤}&lt;br /&gt;
* &amp;amp;lt;S&amp;gt; → •, {─┤}&lt;br /&gt;
* &amp;amp;lt;A&amp;gt; → • &amp;amp;lt;B&amp;gt; b &amp;amp;lt;B&amp;gt; c, {a, ─┤}&lt;br /&gt;
* &amp;amp;lt;A&amp;gt; → • &amp;amp;lt;C&amp;gt; c &amp;amp;lt;B&amp;gt;, {a, ─┤}&lt;br /&gt;
* &amp;amp;lt;B&amp;gt; → • a &amp;amp;lt;D&amp;gt;, {b}&lt;br /&gt;
* &amp;amp;lt;C&amp;gt; → • a &amp;amp;lt;D&amp;gt;, {c}&lt;br /&gt;
Kako bismo odredili ∇ vrstu kontrolne tabele SLR(1) parsera, moramo odrediti i relevantne FIRST i FOLLOW skupove:&lt;br /&gt;
* FOLLOW(&amp;amp;lt;C&amp;gt;) = {c}&lt;br /&gt;
* FOLLOW(&amp;amp;lt;S&amp;gt;) = {─┤}&lt;br /&gt;
* FIRST(&amp;amp;lt;S&amp;gt;) = FIRST(&amp;amp;lt;A&amp;gt;) = FIRST(&amp;amp;lt;B&amp;gt;) ∪ FIRST(&amp;amp;lt;C&amp;gt;) = {a}&lt;br /&gt;
* FOLLOW(&amp;amp;lt;A&amp;gt;) = FIRST(&amp;amp;lt;S&amp;gt;) ∪ FOLLOW(&amp;amp;lt;S&amp;gt;) = {a, ─┤}&lt;br /&gt;
* FOLLOW(&amp;amp;lt;B&amp;gt;) = FOLLOW(&amp;amp;lt;A&amp;gt;) ∪ {b, c} = {a, b, c, ─┤}&lt;br /&gt;
* FOLLOW(&amp;amp;lt;D&amp;gt;) = FOLLOW(&amp;amp;lt;C&amp;gt;) ∪ FOLLOW(&amp;amp;lt;B&amp;gt;) = {a, b, c, ─┤}&lt;br /&gt;
Odavde možemo videti da se u &amp;lt;code&amp;gt;a&amp;lt;/code&amp;gt; koloni nalazi SHIFT, a u ─┤ koloni REDUCE(2). Kontrolna tabela bi trebalo da je ista za oba parsera.&lt;br /&gt;
&lt;br /&gt;
== 3. zadatak ==&lt;br /&gt;
{{delimično rešeno}}&lt;br /&gt;
=== Postavka ===&lt;br /&gt;
# &amp;amp;lt;S&amp;gt; → a &amp;amp;lt;A&amp;gt;&lt;br /&gt;
# &amp;amp;lt;S&amp;gt; → &amp;amp;lt;S&amp;gt; b&lt;br /&gt;
# &amp;amp;lt;A&amp;gt; → c &amp;amp;lt;A&amp;gt;&lt;br /&gt;
# &amp;amp;lt;A&amp;gt; → d&lt;br /&gt;
&lt;br /&gt;
Na ulaz LR(0) parsera koji je opisan datom gramatikom dovedi se ulazna sekvenca &amp;lt;code&amp;gt;accbcadb&amp;lt;/code&amp;gt;. Pretpostavka je da se za oporavak od grešaka koristi jednostavan panic mode algoritam:&lt;br /&gt;
&amp;lt;div class=&amp;quot;abc-list&amp;quot;&amp;gt;&lt;br /&gt;
# sa sigurnim simbolom c.&lt;br /&gt;
# sa sigurnim simbolom d.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
Za tačku a) i b) zasebno prikazati rad parsera i jasno naznačiti da li je parser uspešno završio parsiranje.&lt;br /&gt;
&lt;br /&gt;
=== Rešenje ===&lt;br /&gt;
&lt;br /&gt;
== 4. zadatak ==&lt;br /&gt;
=== Postavka ===&lt;br /&gt;
Kompajler za mikrojavu na izlazu daje sledeći ispis tabele simbola i listing bajtkoda. Kako izgleda izvorni mikrojava program koji odgovara ovim izlazima?&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
==================SADRŽAJ TABELE SIMBOLA=======================&lt;br /&gt;
(Level -1)&lt;br /&gt;
Type int: int, 0, 0&lt;br /&gt;
Type char: char, 0, 0&lt;br /&gt;
Con eol: char, 10, 0&lt;br /&gt;
Con null: Class, 0, 0&lt;br /&gt;
Meth chr: char, 0, 1 [Var i: int, 0, 1 ]&lt;br /&gt;
Meth ord: int, 0, 1 [Var ch: char, 0, 1 ]&lt;br /&gt;
Meth len: int, 0, 1 [Var arr: Arr of notype, 0, 1 ]&lt;br /&gt;
Prog PROBA: notype, 0, 0&lt;br /&gt;
[Type SUPERKLASA: Class, 0, 0 [Fld s: int, 1, 1 ][Meth foo: int, 0, 1 [Var this: Class, 0, 2 ]]]&lt;br /&gt;
[Type POTKLASA: Class, 6, 0 [Fld s: int, 1, 1 ][Fld p: int, 2, 1 ][Meth foo: int, 9, 1 [Var this: Class, 0, 2 ]]]&lt;br /&gt;
[Var sk: Class, 12, 0 ]&lt;br /&gt;
[Meth main: notype, 19, 0 ]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Mikrojava bajkod:&amp;lt;sup&amp;gt;[sic]&amp;lt;/sup&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
0: enter 1 1&lt;br /&gt;
3: const_0&lt;br /&gt;
4: jmp 3 (=7)&lt;br /&gt;
7: exit&lt;br /&gt;
8: return&lt;br /&gt;
9: enter 1 1&lt;br /&gt;
12: const_1&lt;br /&gt;
13: neg&lt;br /&gt;
14: jmp 3 (=17)&lt;br /&gt;
17: exit&lt;br /&gt;
18: return&lt;br /&gt;
19: enter 0 0&lt;br /&gt;
22: const 102&lt;br /&gt;
27: putstatic 0&lt;br /&gt;
30: const 111&lt;br /&gt;
35: putstatic 1&lt;br /&gt;
38: const 111&lt;br /&gt;
43: putstatic 2&lt;br /&gt;
46: const_m1&lt;br /&gt;
47: putstatic 3&lt;br /&gt;
50: const 0&lt;br /&gt;
55: putstatic 4&lt;br /&gt;
58: const -2&lt;br /&gt;
63: putstatic 5&lt;br /&gt;
66: const 102&lt;br /&gt;
71: putstatic 6&lt;br /&gt;
74: const 111&lt;br /&gt;
79: putstatic 7&lt;br /&gt;
82: const 111&lt;br /&gt;
87: putstatic 8&lt;br /&gt;
90: const_m1&lt;br /&gt;
91: putstatic 9&lt;br /&gt;
94: const 9&lt;br /&gt;
99: putstatic 10&lt;br /&gt;
102: const -2&lt;br /&gt;
107: putstatic 11&lt;br /&gt;
110: new 12&lt;br /&gt;
113: dup&lt;br /&gt;
114: const 6&lt;br /&gt;
119: putfield 0&lt;br /&gt;
122: putstatic 12&lt;br /&gt;
125: getstatic 12&lt;br /&gt;
128: const_1&lt;br /&gt;
129: putfield 1&lt;br /&gt;
132: getstatic 12&lt;br /&gt;
135: dup&lt;br /&gt;
136: getfield 0&lt;br /&gt;
139: invokevirtual foo&lt;br /&gt;
156: const_0&lt;br /&gt;
157: print&lt;br /&gt;
158: exit&lt;br /&gt;
159: return&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Rešenje ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
program PROBA&lt;br /&gt;
    class SUPERKLASA {&lt;br /&gt;
        int s;&lt;br /&gt;
        {&lt;br /&gt;
            int foo() {&lt;br /&gt;
                return 0;&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    class POTKLASA extends SUPERKLASA {&lt;br /&gt;
        int p;&lt;br /&gt;
        {&lt;br /&gt;
            int foo() {&lt;br /&gt;
                return -1;&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    SUPERKLASA sk;&lt;br /&gt;
    {&lt;br /&gt;
        void main() {&lt;br /&gt;
            sk = new POTKLASA();&lt;br /&gt;
            sk.s = 1;&lt;br /&gt;
            print(sk.foo(), 0);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 5. zadatak ==&lt;br /&gt;
=== Postavka ===&lt;br /&gt;
Za dati programski fragment napisati odgovarajući međukod u SSA formi i nacrtati graf toka kontrole na nivou osnovnih blokova.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
x = 0;&lt;br /&gt;
y = 1;&lt;br /&gt;
z = 2;&lt;br /&gt;
do {&lt;br /&gt;
    x = x - 1;&lt;br /&gt;
&lt;br /&gt;
    if (z == 0) break;&lt;br /&gt;
    else y = y + z;&lt;br /&gt;
&lt;br /&gt;
    z = y + 1;&lt;br /&gt;
} while (z &amp;gt; 1 &amp;amp;&amp;amp; x == 0);&lt;br /&gt;
x = z - y;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Rešenje ===&lt;br /&gt;
[[Датотека:PPR februar 2022 zadatak 5.drawio.svg|thumb|Graf toka kontrole u petom zadatku.]]&lt;br /&gt;
# x1 := 0&lt;br /&gt;
# y1 := 1&lt;br /&gt;
# z1 := 2&lt;br /&gt;
# t1 := Ф(x1, x2)&lt;br /&gt;
# t2 := t1 - 1&lt;br /&gt;
# x2 := t2&lt;br /&gt;
# t3 := Ф(z1, z2)&lt;br /&gt;
# if t3 == 0 goto 17&lt;br /&gt;
# t4 := Ф(y1, y2)&lt;br /&gt;
# t5 := Ф(z1, z2)&lt;br /&gt;
# t6 := t4 + t5&lt;br /&gt;
# y2 := t6&lt;br /&gt;
# t7 := y2 + 1&lt;br /&gt;
# z2 := t7&lt;br /&gt;
# if z2 &amp;lt;= 1 goto 17&lt;br /&gt;
# if x2 == 0 goto 4&lt;br /&gt;
# t8 := Ф(y1, y2)&lt;br /&gt;
# t9 := Ф(z1, z2)&lt;br /&gt;
# t10 := t9 - t8&lt;br /&gt;
# x3 := t10&lt;br /&gt;
&lt;br /&gt;
[[Категорија:Рокови]]&lt;br /&gt;
[[Категорија:Програмски преводиоци 1]]&lt;/div&gt;</summary>
		<author><name>Brka</name></author>
	</entry>
	<entry>
		<id>https://siwiki.rs/w/index.php?title=%D0%94%D0%B0%D1%82%D0%BE%D1%82%D0%B5%D0%BA%D0%B0:PPR_februar_2021_zadatak_5_graf.svg&amp;diff=5208</id>
		<title>Датотека:PPR februar 2021 zadatak 5 graf.svg</title>
		<link rel="alternate" type="text/html" href="https://siwiki.rs/w/index.php?title=%D0%94%D0%B0%D1%82%D0%BE%D1%82%D0%B5%D0%BA%D0%B0:PPR_februar_2021_zadatak_5_graf.svg&amp;diff=5208"/>
		<updated>2023-01-15T20:53:20Z</updated>

		<summary type="html">&lt;p&gt;Brka: Отпремљено кроз дијалог за отпремање датотека.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{file&lt;br /&gt;
| description = Graf toka kontrole u petom zadatku.&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Brka</name></author>
	</entry>
	<entry>
		<id>https://siwiki.rs/w/index.php?title=%D0%9E%D0%A11/%D0%9C%D0%BE%D0%B4%D0%B8%D1%84%D0%B8%D0%BA%D0%B0%D1%86%D0%B8%D1%98%D0%B5_%D1%98%D1%83%D0%BD_2021&amp;diff=2741</id>
		<title>ОС1/Модификације јун 2021</title>
		<link rel="alternate" type="text/html" href="https://siwiki.rs/w/index.php?title=%D0%9E%D0%A11/%D0%9C%D0%BE%D0%B4%D0%B8%D1%84%D0%B8%D0%BA%D0%B0%D1%86%D0%B8%D1%98%D0%B5_%D1%98%D1%83%D0%BD_2021&amp;diff=2741"/>
		<updated>2021-07-10T17:17:35Z</updated>

		<summary type="html">&lt;p&gt;Brka: /* 20 поена */  Radio sam ovo ceo dan i pucao mi je program, pa sam zamenio naredbe da imaju vise smisla i potvrdio mi je kolega koji je radio ovu modifikaciju da je ipak ovaj pravi redosled&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{tocright}}&lt;br /&gt;
Следеће модификације су се појавиле на одбрани пројекта у јунском року 2021.&lt;br /&gt;
&lt;br /&gt;
== 20 поена ==&lt;br /&gt;
* Следећа ставка иста је као 1. задатак са другог колоквијума у јунском року 2017. године: Школско језгро треба проширити концептом &#039;&#039;баријере&#039;&#039; (&amp;quot;ограда&amp;quot;, &amp;quot;рампа&amp;quot;, енгл. &#039;&#039;barrier&#039;&#039;) чији је интерфејс дат доле. Семантика овог концепта и операција над њим је следећа:&lt;br /&gt;
** Баријера може бити у једном од два стања: &#039;&#039;отворена&#039;&#039; или &#039;&#039;затворена&#039;&#039;. Баријера се иницијализује задатим стањем (аргумент конструктора). Нит у чијем контексту се креира баријера (тј. извршава конструктор) је њен &#039;&#039;власник&#039;&#039;.&lt;br /&gt;
** &amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot; inline&amp;gt;void Barrier::pass()&amp;lt;/syntaxhighlight&amp;gt;: уколико позивајућа нит није власник ове баријере, ова операција нема ефекта - нит наставља своје извршавање; уколико је позивајућа нит власник баријере, а баријера затворена, нит се суспендује (блокира) све док се баријера не отвори; ако је баријера отворена, нит наставља извршавање без блокаде;&lt;br /&gt;
** &amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot; inline&amp;gt;void Barrier::close()&amp;lt;/syntaxhighlight&amp;gt;: затвара баријеру;&lt;br /&gt;
** &amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot; inline&amp;gt;void Barrier::open()&amp;lt;/syntaxhighlight&amp;gt;: отвара баријеру и евентуално деблокира нит која је на баријери блокирана.&lt;br /&gt;
* Написати јавни тест са две нити A и B. Нит B прави глобални семафор са вредношћу 0 и глобалну баријеру са вредношћу 1, а нит A упослено чека док се они не направе. Нит A треба циклично да позива &amp;lt;code&amp;gt;Barrier::open()&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;Barrier::pass()&amp;lt;/code&amp;gt; и &amp;lt;code&amp;gt;Semaphore::wait(0)&amp;lt;/code&amp;gt;, док нит B треба циклично да позива &amp;lt;code&amp;gt;Barrier::pass()&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;Barrier::close()&amp;lt;/code&amp;gt; и &amp;lt;code&amp;gt;Semaphore::signal(0)&amp;lt;/code&amp;gt; &#039;&#039;(редослед позива можда није тачан)&#039;&#039;.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
class Barrier {&lt;br /&gt;
public:&lt;br /&gt;
    Barrier (int open=1);&lt;br /&gt;
    void open();&lt;br /&gt;
    void close();&lt;br /&gt;
    void pass();&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Решење ===&lt;br /&gt;
Оквирно решење може се наћи као решење поменутог колоквијума.&lt;br /&gt;
&lt;br /&gt;
== 30 поена ==&lt;br /&gt;
* Направити да се након позива &amp;lt;code&amp;gt;fork()&amp;lt;/code&amp;gt; као следећа нит за извршавање изабере дете (пре изласка из &amp;lt;code&amp;gt;fork()&amp;lt;/code&amp;gt; у родитељској нити). Такође, форсирати да се прво бирају нити без деце.&lt;br /&gt;
* Написати тест пример који тестира задату функционалност. На пример, може да изгледа попут:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
int result = Thread::fork();&lt;br /&gt;
if (result != -1) {&lt;br /&gt;
    if (result == 0) {&lt;br /&gt;
        intLock&lt;br /&gt;
        cout &amp;lt;&amp;lt; &amp;quot;Child!&amp;quot; &amp;lt;&amp;lt; endl;&lt;br /&gt;
        intUnlock&lt;br /&gt;
        Thread::exit();&lt;br /&gt;
    } else {&lt;br /&gt;
        intLock&lt;br /&gt;
        cout &amp;lt;&amp;lt; &amp;quot;Parent!&amp;quot; &amp;lt;&amp;lt; endl;&lt;br /&gt;
        intUnlock&lt;br /&gt;
        Thread::waitForForkChildren();&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Решење ===&lt;br /&gt;
* Решење за бирање детета јесте да се у &amp;lt;code&amp;gt;PCB&amp;lt;/code&amp;gt; дода показивач на дете које је изабрано који се поставља на новонаправљено дете у &amp;lt;code&amp;gt;fork()&amp;lt;/code&amp;gt;, проверава да ли је &amp;lt;code&amp;gt;nullptr&amp;lt;/code&amp;gt; у тајмеру, ако није онда се нит која је следећа за извршавање поставља на то дете и показивач се враћа на &amp;lt;code&amp;gt;nullptr&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Једно решење за форсирање нити које немају децу јесте да се, уколико се не дешава бирање детета, из &amp;lt;code&amp;gt;Scheduler&amp;lt;/code&amp;gt; ваде нити док се не пронађе нит без деце (која се одмах постави као нит за извршавање) или док се не избаце све нити, ако су извађене нити са децом оне се убацују у другу листу и на крају се враћају назад у &amp;lt;code&amp;gt;Scheduler&amp;lt;/code&amp;gt;. Уколико нит без деце није пронађена, између вађења и враћања нити проверава се да ли је извучена иједна нит без деце и вади се једна нит са децом уколико није.&lt;br /&gt;
&lt;br /&gt;
[[Категорија:Лабораторијске вежбе]]&lt;br /&gt;
[[Категорија:ОС1]]&lt;/div&gt;</summary>
		<author><name>Brka</name></author>
	</entry>
</feed>