<?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%9F%D0%9E%D0%A1%2F%D0%9B%D0%B0%D0%B1_5_2022</id>
	<title>ПОС/Лаб 5 2022 - Историја измена</title>
	<link rel="self" type="application/atom+xml" href="https://siwiki.rs/w/index.php?action=history&amp;feed=atom&amp;title=%D0%9F%D0%9E%D0%A1%2F%D0%9B%D0%B0%D0%B1_5_2022"/>
	<link rel="alternate" type="text/html" href="https://siwiki.rs/w/index.php?title=%D0%9F%D0%9E%D0%A1/%D0%9B%D0%B0%D0%B1_5_2022&amp;action=history"/>
	<updated>2026-06-04T01:12:04Z</updated>
	<subtitle>Историја измена ове странице на пројекту</subtitle>
	<generator>MediaWiki 1.39.8</generator>
	<entry>
		<id>https://siwiki.rs/w/index.php?title=%D0%9F%D0%9E%D0%A1/%D0%9B%D0%B0%D0%B1_5_2022&amp;diff=4858&amp;oldid=prev</id>
		<title>KockaAdmiralac: Postavka i delimično rešenje od Bilje (zaboravio sam da zapravo ima nalog na vikiju)</title>
		<link rel="alternate" type="text/html" href="https://siwiki.rs/w/index.php?title=%D0%9F%D0%9E%D0%A1/%D0%9B%D0%B0%D0%B1_5_2022&amp;diff=4858&amp;oldid=prev"/>
		<updated>2022-10-01T22:35:17Z</updated>

		<summary type="html">&lt;p&gt;Postavka i delimično rešenje od &lt;a href=&quot;/w/index.php?title=%D0%9A%D0%BE%D1%80%D0%B8%D1%81%D0%BD%D0%B8%D0%BA:Biljana&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new&quot; title=&quot;Корисник:Biljana (страница не постоји)&quot;&gt;Bilje&lt;/a&gt; (zaboravio sam da zapravo ima nalog na vikiju)&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Нова страница&lt;/b&gt;&lt;/p&gt;&lt;div&gt;== Група 1 ==&lt;br /&gt;
=== Поставка ===&lt;br /&gt;
Допунити дату &amp;lt;code&amp;gt;test5.c&amp;lt;/code&amp;gt; датотеку тако да се реши проблем спавајућег берберина. Берберин има салон. У салону шиша муштерије. Док нема муштерија у салону, берберин чека. Берберин шиша муштерије по реду којим су ушле у салон. Због здравствених прописа у салону могу бити највише две муштерије. Свака муштерија има јединствени идентификатор који добија приликом креирања. Тај идентификатор служи за опис активности (нпр. улазак у салон, приступање шишању, итд.).&lt;br /&gt;
&lt;br /&gt;
Додати делове у датотеку &amp;lt;code&amp;gt;test5.c&amp;lt;/code&amp;gt; који су потребни да би програм радио тражени посао. Постојећи код не сме се мењати. Дозвољено је користити &amp;#039;&amp;#039;pthreads&amp;#039;&amp;#039; нити и POSIX семафоре. Главна нит треба да чека док берберин и муштерије не заврше.&lt;br /&gt;
&lt;br /&gt;
Пример једног излаза:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Ulazi u berbernicu 0&lt;br /&gt;
Sredjujem musteriju 0&lt;br /&gt;
Sredjena musterija 0&lt;br /&gt;
Izlazi iz berbernice 0&lt;br /&gt;
Ulazi u berbernicu 1&lt;br /&gt;
Sredjujem musteriju 1&lt;br /&gt;
Ulazi u berbernicu 2&lt;br /&gt;
Sredjena musterija 1&lt;br /&gt;
Izlazi iz berbernice 1&lt;br /&gt;
Sredjujem musteriju 2&lt;br /&gt;
Sredjena musterija 2&lt;br /&gt;
Izlazi iz berbernice 2&lt;br /&gt;
Ulazi u berbernicu 0&lt;br /&gt;
Sredjujem musteriju 0&lt;br /&gt;
Sredjena musterija 0&lt;br /&gt;
Izlazi iz berbernice 0&lt;br /&gt;
Ulazi u berbernicu 1&lt;br /&gt;
Sredjujem musteriju 1&lt;br /&gt;
Sredjena musterija 1&lt;br /&gt;
Izlazi iz berbernice 1&lt;br /&gt;
Ulazi u berbernicu 0&lt;br /&gt;
Sredjujem musteriju 0&lt;br /&gt;
Sredjena musterija 0&lt;br /&gt;
Izlazi iz berbernice 0&lt;br /&gt;
Ulazi u berbernicu 2&lt;br /&gt;
Sredjujem musteriju 2&lt;br /&gt;
Ulazi u berbernicu 1&lt;br /&gt;
Sredjena musterija 2&lt;br /&gt;
Izlazi iz berbernice 2&lt;br /&gt;
Sredjujem musteriju 1&lt;br /&gt;
Sredjena musterija 1&lt;br /&gt;
Izlazi iz berbernice 1&lt;br /&gt;
Ulazi u berbernicu 0&lt;br /&gt;
Sredjujem musteriju 0&lt;br /&gt;
Sredjena musterija 0&lt;br /&gt;
Izlazi iz berbernice 0&lt;br /&gt;
Ulazi u berbernicu 1&lt;br /&gt;
Sredjujem musteriju 1&lt;br /&gt;
Ulazi u berbernicu 2&lt;br /&gt;
Sredjena musterija 1&lt;br /&gt;
Izlazi iz berbernice 1&lt;br /&gt;
Sredjujem musteriju 2&lt;br /&gt;
Ulazi u berbernicu 0&lt;br /&gt;
Sredjena musterija 2&lt;br /&gt;
Izlazi iz berbernice 2&lt;br /&gt;
Sredjujem musteriju 0&lt;br /&gt;
Sredjena musterija 0&lt;br /&gt;
Izlazi iz berbernice 0&lt;br /&gt;
Ulazi u berbernicu 1&lt;br /&gt;
Sredjujem musteriju 1&lt;br /&gt;
Sredjena musterija 1&lt;br /&gt;
Izlazi iz berbernice 1&lt;br /&gt;
Ulazi u berbernicu 2&lt;br /&gt;
Sredjujem musteriju 2&lt;br /&gt;
Sredjena musterija 2&lt;br /&gt;
Izlazi iz berbernice 2&lt;br /&gt;
Ulazi u berbernicu 2&lt;br /&gt;
Sredjujem musteriju 2&lt;br /&gt;
Sredjena musterija 2&lt;br /&gt;
Izlazi iz berbernice 2&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Решење ===&lt;br /&gt;
{{делимично решено}}&lt;br /&gt;
Следеће решење је освојило 6/14 бодова и асистенти су оставили коментаре напоменуте испод.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
#include &amp;lt;stdlib.h&amp;gt;&lt;br /&gt;
#include &amp;lt;pthread.h&amp;gt;&lt;br /&gt;
#include &amp;lt;semaphore.h&amp;gt;&lt;br /&gt;
#include &amp;lt;unistd.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#define printThreadSafe(str,...) {\&lt;br /&gt;
    sem_wait(&amp;amp;mutexIspisi);\&lt;br /&gt;
    printf(str, __VA_ARGS__);\&lt;br /&gt;
    sem_post(&amp;amp;mutexIspisi);\&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#define M (5)&lt;br /&gt;
#define N (3)&lt;br /&gt;
&lt;br /&gt;
sem_t mutexIspisi;&lt;br /&gt;
sem_t Udji;&lt;br /&gt;
sem_t musterije;&lt;br /&gt;
&lt;br /&gt;
static int ind=0;&lt;br /&gt;
&lt;br /&gt;
void udjiUBerbernicu(int id) {&lt;br /&gt;
    sem_wait(&amp;amp;Udji); // Коментар: &amp;quot;kada da izadje? -2&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void* musterija(void *param) {&lt;br /&gt;
    int id = ind++ ; // Odrediti ID musterije&lt;br /&gt;
                     // Коментар: &amp;quot;nije thread safe -2&amp;quot;&lt;br /&gt;
    sem_wait(&amp;amp;musterije);&lt;br /&gt;
    for (int i = 0; i &amp;lt; M; i++) {&lt;br /&gt;
        sleep(id * 3 + rand()%10);&lt;br /&gt;
        printThreadSafe(&amp;quot;Ulazi u berbernicu %d\n&amp;quot;, id);&lt;br /&gt;
        udjiUBerbernicu(id);&lt;br /&gt;
        printThreadSafe(&amp;quot;Izlazi iz berbernice %d\n&amp;quot;, id);&lt;br /&gt;
        sleep(id * 3 + rand()%10);&lt;br /&gt;
    }&lt;br /&gt;
    free(param);&lt;br /&gt;
    sem_post(&amp;amp;musterije);&lt;br /&gt;
    return 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void podsisaj() {&lt;br /&gt;
    int id = ind ; // odrediti sledecu musteriji&lt;br /&gt;
                   // Коментар: &amp;quot;ovo treba da preda musterija koja udje -2&amp;quot;&lt;br /&gt;
    printThreadSafe(&amp;quot;Sredjujem musteriju %d\n&amp;quot;, id);&lt;br /&gt;
    sleep(3);&lt;br /&gt;
    printThreadSafe(&amp;quot;Sredjena musterija %d\n&amp;quot;, id);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void* berber(void* param) {&lt;br /&gt;
    for (int i = 0; i &amp;lt; M * N; i++) {&lt;br /&gt;
        // Коментар: &amp;quot;kada ima nekog? -2&amp;quot;&lt;br /&gt;
        podsisaj();&lt;br /&gt;
        sleep(1);&lt;br /&gt;
        sem_post(&amp;amp;Udji);&lt;br /&gt;
    }&lt;br /&gt;
    return 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
int main() {&lt;br /&gt;
    pthread_t berberin, musterije[N];&lt;br /&gt;
    srand(time(0));&lt;br /&gt;
    sem_init(&amp;amp;mutexIspisi, 0, 1);&lt;br /&gt;
    // inicijalizacija ostalih semafora i niti&lt;br /&gt;
    sem_init(&amp;amp;Udji, 0, 2);&lt;br /&gt;
    sem_init(&amp;amp;musterije, 0, N);&lt;br /&gt;
    if (pthread_create(&amp;amp;berberin, 0, berber, 0)){&lt;br /&gt;
        perror(NULL);&lt;br /&gt;
        exit(1);&lt;br /&gt;
    }&lt;br /&gt;
    for (int i=0; i&amp;lt;N; i++) {&lt;br /&gt;
        if (pthread_create(&amp;amp;musterije[i], 0, musterija, 0)) {&lt;br /&gt;
            perror(NULL);&lt;br /&gt;
            exit(1);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    // kraj inicijalizacije&lt;br /&gt;
    // Sacekati sve niti&lt;br /&gt;
    pthread_join(berberin,0);&lt;br /&gt;
    for(int i=0; i&amp;lt;N; i++){&lt;br /&gt;
        pthread_join(musterije[i],0);&lt;br /&gt;
    }&lt;br /&gt;
    sem_close(&amp;amp;mutexIspisi);&lt;br /&gt;
    sem_destroy(&amp;amp;Udji);&lt;br /&gt;
    sem_destroy(&amp;amp;musterije);&lt;br /&gt;
    exit(0);&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>