destroy added

This commit is contained in:
user
2025-12-02 17:10:23 +01:00
parent 3afa165ef3
commit dcf66e7785
3 changed files with 24 additions and 9 deletions

View File

@@ -33,7 +33,7 @@ class Semaphore {
*/ */
explicit Semaphore(unsigned c = 0) : counter(c) {} explicit Semaphore(unsigned c = 0) : counter(c) {}
unsigned counter; unsigned counter;
bool used;
/*! \brief Wait for access to the critical area. /*! \brief Wait for access to the critical area.
* *
* Enter/decrement/wait operation: If the counter is greater than 0, then * Enter/decrement/wait operation: If the counter is greater than 0, then

View File

@@ -49,23 +49,38 @@ bool sem_init(Vault &vault, size_t id, uint32_t value) {
if (id >= vault.MAX_SEMS) { if (id >= vault.MAX_SEMS) {
return false; // outofrange id return false; // outofrange id
} }
if (vault.sems[id].used==1){
return false; //already in use
}
vault.sems[id].counter=value; vault.sems[id].counter=value;
return true; return true;
} }
void sem_destroy(Vault &vault, size_t id) { bool sem_destroy(Vault &vault, size_t id) {
(void)vault; if (id >= vault.MAX_SEMS) {
(void)id; return false; // outofrange id
}
if (vault.sems[id].used==0){
return false; //already in free
}
vault.sems[id].used=0;
vault.sems[id].counter=0;
return true;
} }
void sem_signal(Vault &vault, size_t id) { bool sem_signal(Vault &vault, size_t id) {
(void)vault; (void)vault;
(void)id; (void)id;
return true;
} }
void sem_wait(Vault &vault, size_t id) { bool sem_wait(Vault &vault, size_t id) {
(void)vault; (void)vault;
(void)id; (void)id;
return true;
} }
void exit(Vault &vault) { (void)vault; } void exit(Vault &vault) { (void)vault; }

View File

@@ -18,9 +18,9 @@ size_t write(Vault &vault, uint32_t id, const void *buffer, size_t size);
size_t read(Vault &vault, uint32_t id); size_t read(Vault &vault, uint32_t id);
void sleep(Vault &vault, size_t ms); void sleep(Vault &vault, size_t ms);
bool sem_init(Vault &vault, size_t id, uint32_t value); bool sem_init(Vault &vault, size_t id, uint32_t value);
void sem_destroy(Vault &vault, size_t id); bool sem_destroy(Vault &vault, size_t id);
void sem_signal(Vault &vault, size_t id); bool sem_signal(Vault &vault, size_t id);
void sem_wait(Vault &vault, size_t id); bool sem_wait(Vault &vault, size_t id);
void exit(Vault &vault); void exit(Vault &vault);
void kill(Vault &vault, size_t pid); void kill(Vault &vault, size_t pid);