pburgio / IndInf20

This is official repository of the course Industrial Informatics LT, Year 2019/20, at University of Modena and Reggio Emilia, held at Fondazione Universitaria di Mantova
https://hipert.unimore.it/people/paolob/pub/Industrial_Informatics/index.html
GNU General Public License v3.0
0 stars 0 forks source link

il semaphore del progetto "producer-consumer.c" non funziona #18

Closed Sladerix closed 3 years ago

Sladerix commented 3 years ago

Sono rimasto indietro di una lezione, e stavo guardando ora la lezione del 10 Novembre in cui viene fatto l'esempio per un primo utilizzo dei semafori -> "producer-consumer.c"

Utilizzo Mac (quindi non serve Cygwin, o simili)

Compilando il .c presente nella repository di GitHub con gcc producer-consumer.c -Wall -o producer-consumer -l pthread

escono tre warning come si vede durante la lezione (di cui uno che dice "sem_wait() deprecated")

Ma sopratutto se fatto eseguire l'eseguibile prodotto si nota che a volte l'output è coretto, mentre altre l'output è errato, indicando che il sem_wait non funziona.

Allego screenshot del terminale.

Schermata 2020-11-16 alle 15 39 22
MatteoSpaggiari commented 3 years ago

Credo (ma non ne sono sicuro) che l'errore sia nella riga 36 "sem_init(&mysemaphore, 1, 0);", in realtà il secondo argomento deve essere 0 e non 1, andando a vedere a questo link https://www.man7.org/linux/man-pages/man3/sem_init.3.html dice che se il secondo argomento è 0 il semaforo è condiviso tra i threads di un processo (quello che si vuole), mentre se è 1 è condiviso solo tra processi... In realtà in una lezione il profe si era già accorto dell'errore ma in un altro esercizio...

Sladerix commented 3 years ago

Credo (ma non ne sono sicuro) che l'errore sia nella riga 36 "sem_init(&mysemaphore, 1, 0);", in realtà il secondo argomento deve essere 0 e non 1, andando a vedere a questo link https://www.man7.org/linux/man-pages/man3/sem_init.3.html dice che se il secondo argomento è 0 il semaforo è condiviso tra i threads di un processo (quello che si vuole), mentre se è 1 è condiviso solo tra processi... In realtà in una lezione il profe si era già accorto dell'errore ma in un altro esercizio...

Ho appena provato, stesso risultato :(

Ho guardato anche io un po' su internet, e ho notato di gente che non usa sem_init, ma usa sem_open, però la struttura è diversa poi...

pburgio commented 3 years ago

Salve, il problema è che OS X non supporta i named semaphores di POSIX. Fondamentalmente, il mio esempio aderisce allo standard, ma è OS X che non vi aderisce. Il suo collega ha ragione, il secondo parametro deve essere '0', è una imprecisione nell'esercizio che ho appena provveduto a sistemare

Sladerix commented 3 years ago

Salve, il problema è che OS X non supporta i named semaphores di POSIX. Fondamentalmente, il mio esempio aderisce allo standard, ma è OS X che non vi aderisce. Il suo collega ha ragione, il secondo parametro deve essere '0', è una imprecisione nell'esercizio che ho appena provveduto a sistemare

Ho provveduto a fare una versione dello stesso esercizio con i "named_semaphores", in modo che possa essere consultato come guida per tutti quanti.

Dove posso caricarlo?

pburgio commented 3 years ago

Le direi di branchare "master", per avere un workbench pulito, aggiungerlo lì, e farmi una merge request

On 20-Nov-20 11:15, Antonello Barbone wrote:

Salve, il problema è che OS X non supporta i named semaphores di
POSIX. Fondamentalmente, il mio esempio aderisce allo standard, ma
è OS X che non vi aderisce.
Il suo collega ha ragione, il secondo parametro deve essere '0', è
una imprecisione nell'esercizio che ho appena provveduto a sistemare

Ho provveduto a fare una versione dello stesso esercizio con i "named_semaphores", in modo che possa essere consultato come guida per tutti quanti.

Dove posso caricarlo?

— You are receiving this because you modified the open/close state. Reply to this email directly, view it on GitHub https://github.com/HiPeRT/IndInf20/issues/18#issuecomment-731078815, or unsubscribe https://github.com/notifications/unsubscribe-auth/AF4WEJLPQLUPX5RFINRSST3SQY6U3ANCNFSM4TXH4BMQ.