Closed Sladerix closed 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...
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...
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
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?
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.
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.