1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34
|
/* Fonction pour les threads des clients. */
static void * fn_clients (void * p_data)
{
int nb = (int) p_data;
while (1)
{
int val = get_random (6);
psleep (get_random (3));
/* Debut de la zone protegee. */
pthread_mutex_lock (& store.mutex_stock);
if (val > store.stock)
{
pthread_cond_signal (& store.cond_stock);
pthread_cond_wait (& store.cond_clients, & store.mutex_stock);
}
store.stock = store.stock - val;
printf (
"Client %d prend %d du stock, reste %d en stock !\n",
nb, val, store.stock
);
pthread_mutex_unlock (& store.mutex_stock);
/* Fin de la zone protegee. */
}
return NULL;
} |
Partager