|
@@ -14,14 +14,17 @@ extern int errno;
|
|
|
/**
|
|
|
* Initialise les semaphores
|
|
|
* @param semaphore* Le tableau de semaphore
|
|
|
+ * @param int La taille du tableau
|
|
|
* @param int* Valeur à initialiser
|
|
|
* @return boolean Reussite
|
|
|
*/
|
|
|
-boolean ini_sem(semaphore* sem, int* iniVal) {
|
|
|
+boolean ini_sem(semaphore* sem, int size, int* iniVal) {
|
|
|
/* Initialisation des valeurs */
|
|
|
- if (semctl(sem->id, 0, SETALL, iniVal) == ERR) {
|
|
|
- addperror("Impossible d'initialiser le tableau de semaphore");
|
|
|
- return false;
|
|
|
+ for(int i = 0; i < size; i++){
|
|
|
+ if(semctl(sem->id, i, SETVAL, iniVal[i]) == ERR){
|
|
|
+ addperror("Impossible d'initialiser le tableau de semaphore");
|
|
|
+ return false;
|
|
|
+ }
|
|
|
}
|
|
|
/* Retour */
|
|
|
return true;
|
|
@@ -52,7 +55,7 @@ boolean create_sem(semaphore* sem, int code, int nb, int* iniVal) {
|
|
|
sem->key = key;
|
|
|
sem->nb = nb;
|
|
|
/* Initialise semaphore */
|
|
|
- return ini_sem(sem, iniVal);
|
|
|
+ return ini_sem(sem, nb, iniVal);
|
|
|
}
|
|
|
|
|
|
boolean get_sem(semaphore* sem, int code) {
|
|
@@ -130,4 +133,8 @@ boolean delete_sem(semaphore* sem) {
|
|
|
sem->key = 0;
|
|
|
sem->nb = 0;
|
|
|
return true;
|
|
|
+}
|
|
|
+
|
|
|
+int get_sem_value(semaphore* sem, int num){
|
|
|
+ return semctl(sem->id, num, GETVAL);
|
|
|
}
|