Add some light docs for mutexed access

This commit is contained in:
Bruce Hill 2025-01-02 16:29:21 -05:00
parent be384c0caa
commit 1a4a7250bb
3 changed files with 26 additions and 1 deletions

View File

@ -27,6 +27,7 @@ Information about Tomo's built-in types can be found here:
- [Integer Ranges](ranges.md)
- [Integers](integers.md)
- [Languages](langs.md)
- [Mutexed Data](mutexed.md)
- [Paths](paths.md)
- [Random Number Generators](rng.md)
- [Sets](sets.md)

24
docs/mutexed.md Normal file
View File

@ -0,0 +1,24 @@
# Mutexed Data
To serve the general case of synchronizing access to shared datastructures,
Tomo uses the `mutexed` keyword, which returns a function which can be used
to ensure that all access to a datastructure is guarded by a mutex:
```tomo
with_nums := mutexed [10, 20, 30]
thread := Thread.new(func():
with_nums(func(nums:&[Int]):
nums:insert(30)
)
)
with_nums(func(nums:&[Int]):
nums:insert(40)
)
thread:join()
```
Without having a mutex guard, the code above could run into concurrency issues
leading to data corruption.

View File

@ -2,7 +2,7 @@
Tomo supports POSIX threads (pthreads) through the `Thread` type. The
recommended practice is to have each thread interact with other threads only
through mutex-guarded datastructures.
through [mutex-guarded datastructures](mutexed.md).
## Thread Methods