Sto acquisendo alcune risorse in ordine crescente. Quale versione è migliore? Mi è stato detto che il n. 2 porta alla fame di discussioni che richiedono risorse numerate più elevate. È vero? Se sì, come e perché?Acquisizione risorse e pthreads
a[] sorted array
1.
for(int i = 1; i < N; ++i) {
lock(mutex)
while(!resource_available[a[i]]) {
pthread_cond_wait(&cond_w[a[i]], &mutex);
}
resource_available[a[i]] = 0;
unlock(mutex)
}
2.
lock(mutex)
for(int i = 1; i < N; ++i) {
while(!resource_available[a[i]]) {
pthread_cond_wait(&cond_w[a[i]], &mutex);
}
resource_available[a[i]] = 0;
}
unlock(mutex)
EDIT: Si scopre che ordine in cui si rilascia le risorse fa la differenza, non i costrutti di cui sopra. Se li rilasci nell'ordine in cui li hai ricevuti, succede la fame, se in senso opposto probabilmente no.
Non dovrebbe esserci una chiamata 'acquire_resource (a [i]) 'da qualche parte? – caf
Ho aggiunto l'acquisizione. – niteria
http://stackoverflow.com/questions/1162587/what-is-starvation una definizione di fame – niteria