destroy added
This commit is contained in:
@@ -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
|
||||||
|
|||||||
@@ -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; // out‐of‐range id
|
return false; // out‐of‐range 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; // out‐of‐range 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; }
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user