summaryrefslogtreecommitdiff
path: root/docs/application/shared.md
diff options
context:
space:
mode:
authornodist <kevin.comas.git@gmail.com>2026-06-15 21:19:41 -0400
committernodist <kevin.comas.git@gmail.com>2026-06-15 21:19:41 -0400
commite99f60fe8cdef48aad9aa6a1b360b600443ac659 (patch)
tree49dcfe048e5a93360bbde2cabb54c708c80cf5a4 /docs/application/shared.md
parent47a27b0fd6eb0831a74479883ba0b4c30d226fbe (diff)
add shared mutating algo
Diffstat (limited to 'docs/application/shared.md')
-rw-r--r--docs/application/shared.md15
1 files changed, 14 insertions, 1 deletions
diff --git a/docs/application/shared.md b/docs/application/shared.md
index bed94d2..b2760c5 100644
--- a/docs/application/shared.md
+++ b/docs/application/shared.md
@@ -9,7 +9,20 @@ typedef struct _kpl_shared {
KPL_SLAB_HEADER(_kpl_shared);
void *data;
kpl_atomic_queue queue;
- _Atomic bool mutating;
+ _Atomic uint32_t lock;
bool mark;
} kpl_shared;
```
+
+## Mutating
+
+1. Before adding to the `queue` do `value = lock++`
+2. Add to the queue
+3. If `value` is `0` the thread does an async schedule of the mutator task, otherwise the thread moves on
+
+### Mutator Task
+
+1. Get task from `queue` and run task
+2. After task completion, do `value = --lock`, stop if `value` is `0`, otherwise repeat
+
+## Garbage Collection