<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="sr">
	<id>https://siwiki.rs/w/index.php?action=history&amp;feed=atom&amp;title=%D0%9A%D0%94%D0%9F%2F%D0%9A2_2019</id>
	<title>КДП/К2 2019 - Историја измена</title>
	<link rel="self" type="application/atom+xml" href="https://siwiki.rs/w/index.php?action=history&amp;feed=atom&amp;title=%D0%9A%D0%94%D0%9F%2F%D0%9A2_2019"/>
	<link rel="alternate" type="text/html" href="https://siwiki.rs/w/index.php?title=%D0%9A%D0%94%D0%9F/%D0%9A2_2019&amp;action=history"/>
	<updated>2026-06-04T08:02:30Z</updated>
	<subtitle>Историја измена ове странице на пројекту</subtitle>
	<generator>MediaWiki 1.39.8</generator>
	<entry>
		<id>https://siwiki.rs/w/index.php?title=%D0%9A%D0%94%D0%9F/%D0%9A2_2019&amp;diff=6176&amp;oldid=prev</id>
		<title>Kmeeth: Исправљена грешка у функцији за налажење десне виљушке</title>
		<link rel="alternate" type="text/html" href="https://siwiki.rs/w/index.php?title=%D0%9A%D0%94%D0%9F/%D0%9A2_2019&amp;diff=6176&amp;oldid=prev"/>
		<updated>2023-05-11T21:36:47Z</updated>

		<summary type="html">&lt;p&gt;Исправљена грешка у функцији за налажење десне виљушке&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;sr&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Старија измена&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Верзија на датум 11. мај 2023. у 23:36&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l17&quot;&gt;Ред 17:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Ред 17:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;     }&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;     }&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;     private int right(int id) {&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;     private int right(int id) {&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;         return id + 1;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;         return &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;(&lt;/ins&gt;id + 1&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;) % id&lt;/ins&gt;;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;     }&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;     }&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;     public synchronized void acquireForks(int id) {&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;     public synchronized void acquireForks(int id) {&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Kmeeth</name></author>
	</entry>
	<entry>
		<id>https://siwiki.rs/w/index.php?title=%D0%9A%D0%94%D0%9F/%D0%9A2_2019&amp;diff=5588&amp;oldid=prev</id>
		<title>Fedja: kategorije zadataka</title>
		<link rel="alternate" type="text/html" href="https://siwiki.rs/w/index.php?title=%D0%9A%D0%94%D0%9F/%D0%9A2_2019&amp;diff=5588&amp;oldid=prev"/>
		<updated>2023-02-11T02:56:53Z</updated>

		<summary type="html">&lt;p&gt;kategorije zadataka&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;sr&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Старија измена&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Верзија на датум 11. фебруар 2023. у 04:56&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l2&quot;&gt;Ред 2:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Ред 2:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;#039;&amp;#039;&amp;#039;Други колоквијум 2019. године&amp;#039;&amp;#039;&amp;#039; одржан је 23. априла. Поставка се може наћи са [https://rti.etf.bg.ac.rs/rti/ir3kdp/rokovi/kdp19.zip странице предмета] (зипована).&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;#039;&amp;#039;&amp;#039;Други колоквијум 2019. године&amp;#039;&amp;#039;&amp;#039; одржан је 23. априла. Поставка се може наћи са [https://rti.etf.bg.ac.rs/rti/ir3kdp/rokovi/kdp19.zip странице предмета] (зипована).&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;== 1. задатак ==&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;== &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;{{категорија|&lt;/ins&gt;1. задатак&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;|Монитори}} &lt;/ins&gt;==&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;=== Поставка ===&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;=== Поставка ===&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Проблем филозофа који ручавају (&amp;#039;&amp;#039;Dining Philosophers Problem&amp;#039;&amp;#039;). Решити проблем филозофа који ручавају користећи мониторе са &amp;#039;&amp;#039;signal and wait&amp;#039;&amp;#039; дисциплином. Филозофи који су раније изразили жељу за храном треба раније да буду опслужени.&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Проблем филозофа који ручавају (&amp;#039;&amp;#039;Dining Philosophers Problem&amp;#039;&amp;#039;). Решити проблем филозофа који ручавају користећи мониторе са &amp;#039;&amp;#039;signal and wait&amp;#039;&amp;#039; дисциплином. Филозофи који су раније изразили жељу за храном треба раније да буду опслужени.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l44&quot;&gt;Ред 44:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Ред 44:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;== 2. задатак ==&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;== &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;{{категорија|&lt;/ins&gt;2. задатак&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;|Региони}} &lt;/ins&gt;==&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;=== Поставка ===&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;=== Поставка ===&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;У берберници раде два берберина, Аца и Браца, постоји 10 столица за чекање и још петоро муштерија може да стоји и чека. Муштерије које долазе се изјашњавају да ли чекају код Аце или Браце или им је свеједно ко ће да их услужи. Ако муштерија види да нема места у берберници и не може бити услужена, одлази. Када је берберин слободан, муштерија која је најдуже чекала ће прва бити услужена (осим ако чека на другог берберина и тада тражимо следећу муштерију у низу). Када се ослободи столица за чекање, муштерија која је најдуже стајала треба да седне. Уколико је неки од берберина беспослен, он спава, и прва муштерија која код њега дође на ред треба да га пробуди и буде услужена. Користећи условне критичне регионе решити овај проблем.&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;У берберници раде два берберина, Аца и Браца, постоји 10 столица за чекање и још петоро муштерија може да стоји и чека. Муштерије које долазе се изјашњавају да ли чекају код Аце или Браце или им је свеједно ко ће да их услужи. Ако муштерија види да нема места у берберници и не може бити услужена, одлази. Када је берберин слободан, муштерија која је најдуже чекала ће прва бити услужена (осим ако чека на другог берберина и тада тражимо следећу муштерију у низу). Када се ослободи столица за чекање, муштерија која је најдуже стајала треба да седне. Уколико је неки од берберина беспослен, он спава, и прва муштерија која код њега дође на ред треба да га пробуди и буде услужена. Користећи условне критичне регионе решити овај проблем.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Fedja</name></author>
	</entry>
	<entry>
		<id>https://siwiki.rs/w/index.php?title=%D0%9A%D0%94%D0%9F/%D0%9A2_2019&amp;diff=4338&amp;oldid=prev</id>
		<title>KockaAdmiralac: Rešenja oba zadatka i to je to od mene</title>
		<link rel="alternate" type="text/html" href="https://siwiki.rs/w/index.php?title=%D0%9A%D0%94%D0%9F/%D0%9A2_2019&amp;diff=4338&amp;oldid=prev"/>
		<updated>2022-05-15T11:45:24Z</updated>

		<summary type="html">&lt;p&gt;Rešenja oba zadatka i to je to od mene&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Нова страница&lt;/b&gt;&lt;/p&gt;&lt;div&gt;{{tocright}}&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Други колоквијум 2019. године&amp;#039;&amp;#039;&amp;#039; одржан је 23. априла. Поставка се може наћи са [https://rti.etf.bg.ac.rs/rti/ir3kdp/rokovi/kdp19.zip странице предмета] (зипована).&lt;br /&gt;
&lt;br /&gt;
== 1. задатак ==&lt;br /&gt;
=== Поставка ===&lt;br /&gt;
Проблем филозофа који ручавају (&amp;#039;&amp;#039;Dining Philosophers Problem&amp;#039;&amp;#039;). Решити проблем филозофа који ручавају користећи мониторе са &amp;#039;&amp;#039;signal and wait&amp;#039;&amp;#039; дисциплином. Филозофи који су раније изразили жељу за храном треба раније да буду опслужени.&lt;br /&gt;
&lt;br /&gt;
=== Решење ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
class DiningPhilosophers {&lt;br /&gt;
    public static final int N = 10;&lt;br /&gt;
    boolean forks[] = new boolean[N];&lt;br /&gt;
    Condition queue = new Condition();&lt;br /&gt;
    int ticket = 1;&lt;br /&gt;
    private int left(int id) {&lt;br /&gt;
        return id;&lt;br /&gt;
    }&lt;br /&gt;
    private int right(int id) {&lt;br /&gt;
        return id + 1;&lt;br /&gt;
    }&lt;br /&gt;
    public synchronized void acquireForks(int id) {&lt;br /&gt;
        if (queue.queue() || forks[left(id)] || forks[right(id)]) {&lt;br /&gt;
            queue.wait((ticket++) * N + id);&lt;br /&gt;
        }&lt;br /&gt;
        forks[left(id)] = true;&lt;br /&gt;
        forks[right(id)] = true;&lt;br /&gt;
        signal();&lt;br /&gt;
    }&lt;br /&gt;
    public synchronized void releaseForks(int id) {&lt;br /&gt;
        forks[left(id)] = false;&lt;br /&gt;
        forks[right(id)] = false;&lt;br /&gt;
        signal();&lt;br /&gt;
    }&lt;br /&gt;
    private void signal() {&lt;br /&gt;
        if (queue.empty()) {&lt;br /&gt;
            return;&lt;br /&gt;
        }&lt;br /&gt;
        int id = queue.minrank() % N;&lt;br /&gt;
        if (!forks[left(id)] &amp;amp;&amp;amp; !forks[right(id)]) {&lt;br /&gt;
            queue.signal();&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 2. задатак ==&lt;br /&gt;
=== Поставка ===&lt;br /&gt;
У берберници раде два берберина, Аца и Браца, постоји 10 столица за чекање и још петоро муштерија може да стоји и чека. Муштерије које долазе се изјашњавају да ли чекају код Аце или Браце или им је свеједно ко ће да их услужи. Ако муштерија види да нема места у берберници и не може бити услужена, одлази. Када је берберин слободан, муштерија која је најдуже чекала ће прва бити услужена (осим ако чека на другог берберина и тада тражимо следећу муштерију у низу). Када се ослободи столица за чекање, муштерија која је најдуже стајала треба да седне. Уколико је неки од берберина беспослен, он спава, и прва муштерија која код њега дође на ред треба да га пробуди и буде услужена. Користећи условне критичне регионе решити овај проблем.&lt;br /&gt;
&lt;br /&gt;
=== Решење ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;cpp&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;quot;common.h&amp;quot;&lt;br /&gt;
#include &amp;lt;map&amp;gt;&lt;br /&gt;
#include &amp;lt;queue&amp;gt;&lt;br /&gt;
&lt;br /&gt;
using namespace std;&lt;br /&gt;
&lt;br /&gt;
struct BarberShop {&lt;br /&gt;
    // Додељивање идентификатора муштеријама по реду доласка&lt;br /&gt;
    int ticket = 1;&lt;br /&gt;
    // Идентификатор особе која седи у седишту, или 0 уколико нико не седи&lt;br /&gt;
    int seat[2] = {0};&lt;br /&gt;
    // Да ли је берберин завршио са шишањем и чека особу да плати&lt;br /&gt;
    bool finished[2] = {false};&lt;br /&gt;
    // std::map је подразумевано сортиран&lt;br /&gt;
    map&amp;lt;int, int&amp;gt; waitingQueue;&lt;br /&gt;
    // Редови чекања за муштерије код Аце, Браце и оне којима је свеједно&lt;br /&gt;
    queue&amp;lt;int&amp;gt; barberQueue[3];&lt;br /&gt;
};&lt;br /&gt;
BarberShop shop;&lt;br /&gt;
&lt;br /&gt;
const int ACA_ID = 0;&lt;br /&gt;
const int BRACA_ID = 1;&lt;br /&gt;
const int ANY_ID = 2;&lt;br /&gt;
&lt;br /&gt;
void barber(int id) {&lt;br /&gt;
    while (true) {&lt;br /&gt;
        region (shop) {&lt;br /&gt;
            // Спавамо док чекамо да прва особа која дође седне на столицу&lt;br /&gt;
            await (shop.seat[id] != 0);&lt;br /&gt;
        }&lt;br /&gt;
        // Шишање&lt;br /&gt;
        region (shop) {&lt;br /&gt;
            // Завршено шишање, чекамо на плаћање&lt;br /&gt;
            shop.finished[id] = true;&lt;br /&gt;
            await (!shop.finished[id]);&lt;br /&gt;
            // Узимамо следећу муштерију&lt;br /&gt;
            if (!shop.barberQueue[id].empty()) {&lt;br /&gt;
                shop.seat[id] = shop.barberQueue[id].front();&lt;br /&gt;
                shop.barberQueue[id].pop();&lt;br /&gt;
            } else if (!shop.barberQueue[ANY_ID].empty()) {&lt;br /&gt;
                shop.seat[id] = shop.barberQueue[ANY_ID].front();&lt;br /&gt;
                shop.barberQueue[ANY_ID].pop();&lt;br /&gt;
            } else {&lt;br /&gt;
                shop.seat[id] = 0;&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// Да ли је седиште за шишање код одређеног берберина тренутно резервисано за неку особу&lt;br /&gt;
int barberEquals(int barberId, int value) {&lt;br /&gt;
    if (barberId == ACA_ID &amp;amp;&amp;amp; shop.seat[ACA_ID] == value) {&lt;br /&gt;
        return ACA_ID;&lt;br /&gt;
    }&lt;br /&gt;
    if (barberId == BRACA_ID &amp;amp;&amp;amp; shop.seat[BRACA_ID] == value) {&lt;br /&gt;
        return BRACA_ID;&lt;br /&gt;
    }&lt;br /&gt;
    if (barberId == ANY_ID) {&lt;br /&gt;
        if (shop.seat[ACA_ID] == value) {&lt;br /&gt;
            return ACA_ID;&lt;br /&gt;
        }&lt;br /&gt;
        if (shop.seat[BRACA_ID] == value) {&lt;br /&gt;
            return BRACA_ID;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    return -1;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
int barberFree(int barberId) {&lt;br /&gt;
    return barberEquals(barberId, 0);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void client(int barberId) {&lt;br /&gt;
    region (shop) {&lt;br /&gt;
        if (shop.waitingQueue.size() == 15 &amp;amp;&amp;amp; barberFree(barberId) == -1) {&lt;br /&gt;
            // Особа не може бити услужена&lt;br /&gt;
            return;&lt;br /&gt;
        }&lt;br /&gt;
        int myTicket = shop.ticket++;&lt;br /&gt;
        if (barberFree(barberId) != 1) {&lt;br /&gt;
            // Без чекања седамо на столицу за шишање&lt;br /&gt;
            shop.seat[barberFree(barberId)] = myTicket;&lt;br /&gt;
        } else {&lt;br /&gt;
            shop.barberQueue[barberId].push(myTicket);&lt;br /&gt;
            // Овиме повећавамо shop.waitingQueue.size()&lt;br /&gt;
            shop.waitingQueue[myTicket] = shop.waitingQueue.size();&lt;br /&gt;
            // Чекамо на столицу за чекање или шишање&lt;br /&gt;
            await (shop.waitingQueue[myTicket] &amp;lt; 10 || barberEquals(barberId, myTicket) != -1);&lt;br /&gt;
            if (barberEquals(barberId, myTicket) == -1) {&lt;br /&gt;
                // Седамо на столицу за чекање&lt;br /&gt;
                await (barberEquals(barberId, myTicket) != -1);&lt;br /&gt;
            }&lt;br /&gt;
            // Устали смо са столице и смањујемо shop.waitingQueue.size&lt;br /&gt;
            shop.waitingQueue.erase(myTicket);&lt;br /&gt;
            int i = 0;&lt;br /&gt;
            for (auto&amp;amp; it : shop.waitingQueue) {&lt;br /&gt;
                shop.waitingQueue[it.first] = i++;&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        int barber = barberEquals(barberId, myTicket);&lt;br /&gt;
        // Чекање током шишања&lt;br /&gt;
        await (shop.finished[barber]);&lt;br /&gt;
        // Плаћање&lt;br /&gt;
        shop.finished[barber] = false;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Категорија:КДП]]&lt;br /&gt;
[[Категорија:Рокови]]&lt;/div&gt;</summary>
		<author><name>KockaAdmiralac</name></author>
	</entry>
</feed>