Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Test NIU RQi Sport, vi spieghiamo perché una moto così è perfetta
Test NIU RQi Sport, vi spieghiamo perché una moto così è perfetta
Abbiamo potuto provare la moto elettrica di NIU per diversi giorni, ed abbiamo capito davvero il senso di queste moto moderne e semplici da utilizzare
Start Campus: il datacenter raffreddato dal mare
Start Campus: il datacenter raffreddato dal mare
L'acqua del mare viene utilizzata nel nuovo Start Campus per raffreddare ambienti e componenti, senza che neppure una goccia venga consumata: grazie a Schneider Electric, partner nell'infrastruttura, abbiamo potuto visitare questa struttura che ambisce a diventare il primo datacenter per l'intelligenza artificiale in Europa
Samsung Galaxy S25 Edge: il 'sottile' capolavoro che sfida le leggi della fisica
Samsung Galaxy S25 Edge: il 'sottile' capolavoro che sfida le leggi della fisica
Con 5,84 mm di spessore e 163 g di peso, il Galaxy S25 Edge unisce design minimalista, materiali d’élite e potenza da vero flagship. Lo abbiamo provato dal vivo e vi diciamo com'è andata la prova.
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 30-05-2011, 16:00   #1
MrProblema
Junior Member
 
Iscritto dal: Jun 2010
Messaggi: 12
pthread_cond_wait e pthread_cond_signal, domanda

Ciao a tutti,
ho scritto un programma che utilizza mutex e pthread_cond_wait e pthread_cond_signal. Ho solo una domanda: se il thread A manda il segnale S una sola volta con la pthread_cond_signal prima che il thread B sia arrivato a ad attenderlo alla sua pthread_cond_wait, cosa succede? B aspetterà in eterno un segnale che non arriverà mai perchè c'è già stato? Come funziona? Come potrei eventualmente far sì che lui continui a mandare signal con una soluzione abbastanza pulita (tipo senza un ciclo, se si può fare)?

Grazie,
Mr problema

Ultima modifica di MrProblema : 30-05-2011 alle 16:04.
MrProblema è offline   Rispondi citando il messaggio o parte di esso
Old 30-05-2011, 17:57   #2
tuccio`
Senior Member
 
Iscritto dal: Apr 2010
Città: Frosinone
Messaggi: 416
rimane bloccato, per questo si usano i mutex, per rendere atomica la successione di if e wait

in teoria, se l'hai fatto correttamente, se c'è già stato una signal, la wait non dovrebbe essere fatta, perché la condizione è già verificata e non si entra nell'if
tuccio` è offline   Rispondi citando il messaggio o parte di esso
Old 30-05-2011, 20:12   #3
MrProblema
Junior Member
 
Iscritto dal: Jun 2010
Messaggi: 12
Era quello che pensavo anche io, se ho capito bene. Infatti se la signal è già arrivata, quando il secondo thread arriva alla wait, non dovrebbe fermarsi. Invece si bloccava ugualmente. C'è da dire che lanciando la signal non usavo dei mutex anche su di lei..forse era per quello? Diciamo che son riuscito a risolvere coi semafori...però la cosa mi è rimasta qui, sullo stomaco.
MrProblema è offline   Rispondi citando il messaggio o parte di esso
Old 30-05-2011, 23:18   #4
tuccio`
Senior Member
 
Iscritto dal: Apr 2010
Città: Frosinone
Messaggi: 416
Quote:
Originariamente inviato da MrProblema Guarda i messaggi
Era quello che pensavo anche io, se ho capito bene. Infatti se la signal è già arrivata, quando il secondo thread arriva alla wait, non dovrebbe fermarsi. Invece si bloccava ugualmente. C'è da dire che lanciando la signal non usavo dei mutex anche su di lei..forse era per quello? Diciamo che son riuscito a risolvere coi semafori...però la cosa mi è rimasta qui, sullo stomaco.
non mi sono spiegato forse, se chiami la wait e non viene eseguita nessuna signal DOPO la wait, questa rimane bloccata, anche se la signal l'hai chiamata prima, il punto è che lo schema d'uso di una condition variable dovrebbe essere una cosa del tipo:

Codice:
// Thread 1, quello che fa la wait

pthread_mutex_lock(&mutex); // Questo mutex serve a far sì che non avvenga la signal dopo l'if ma prima della wait, perché altirmenti il thread va in deadlock, oltre che a fare mutex sulla variabile condizione
if (!condizione)
{
  pthread_cond_wait(&cond, &mutex);
}
pthread_mutex_unlock(&mutex);
Codice:
// Thread 2, quello che segnala

pthread_mutex_lock(&mutex);
condizione = 1;
pthread_cond_signal(&cond);
pthread_mutex_unlock(&mutex);
quindi dovresti sempre avere un if, che deve essere eseguito solo se la signal non è stata ancora eseguita
tuccio` è offline   Rispondi citando il messaggio o parte di esso
Old 31-05-2011, 08:14   #5
MrProblema
Junior Member
 
Iscritto dal: Jun 2010
Messaggi: 12
Ok, grazie mille. Penso di aver capito ora
MrProblema è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Test NIU RQi Sport, vi spieghiamo perché una moto così è perfetta Test NIU RQi Sport, vi spieghiamo perché ...
Start Campus: il datacenter raffreddato dal mare Start Campus: il datacenter raffreddato dal mare
Samsung Galaxy S25 Edge: il 'sottile' capolavoro che sfida le leggi della fisica Samsung Galaxy S25 Edge: il 'sottile' capolavoro...
Recensione FRITZ!Box 6860 5G: connettività veloce dove serve Recensione FRITZ!Box 6860 5G: connettività...
Recensione DOOM: The Dark Ages, proiettili e heavy metal nel Medioevo Recensione DOOM: The Dark Ages, proiettili e hea...
Ripristinati alcuni propulsori della son...
La stazione spaziale cinese Tiangong si ...
Un nuovo studio indaga la presenza e l'o...
A che punto siamo con EUDI Wallet, il si...
Volkswagen: MEB+ confermata per l'intera...
Vendite EV: aprile fa segnare +29% rispe...
Clair Obscur: Expedition 33 su Switch 2?...
Perché AMD ha ampliato il program...
Il primo ransomware per CPU è in ...
Meta: le inserzioni personalizzate soste...
Xiaomi Poco X7 e X7 Pro ai minimi storic...
F1 25 sulla griglia di partenza: data di...
S.T.A.L.K.E.R.: Legends of the Zone, la ...
Hyundai Inster ora è disponibile ...
PDP Riffmaster: il controller chitarra c...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 04:50.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Served by www2v