aboutsummaryrefslogtreecommitdiff
path: root/examples
diff options
context:
space:
mode:
authorJeroen van Rijn <Kelimion@users.noreply.github.com>2022-08-05 15:03:09 +0200
committerJeroen van Rijn <Kelimion@users.noreply.github.com>2022-08-05 15:03:09 +0200
commitedba99d6360802da152a850056e6754cfed25d27 (patch)
tree4b5ab20c707a2519c9bb81ce4430042fb4ea32f8 /examples
parent35674959f2198cb7de2150c090ed6bb73720cae8 (diff)
Revert "Use `sync.Mutex` rather than a spin lock for the threading example"
This reverts commit 8d1f46d837efdcebaf2e3660942a93337a230329.
Diffstat (limited to 'examples')
-rw-r--r--examples/demo/demo.odin43
1 files changed, 23 insertions, 20 deletions
diff --git a/examples/demo/demo.odin b/examples/demo/demo.odin
index a18a1b44b..457aa786a 100644
--- a/examples/demo/demo.odin
+++ b/examples/demo/demo.odin
@@ -1,15 +1,14 @@
package main
import "core:fmt"
-import "core:intrinsics"
-import "core:math/big"
import "core:mem"
import "core:os"
-import "core:reflect"
-import "core:runtime"
-import "core:sync"
import "core:thread"
import "core:time"
+import "core:reflect"
+import "core:runtime"
+import "core:intrinsics"
+import "core:math/big"
/*
Odin is a general-purpose programming language with distinct typing built
@@ -1101,18 +1100,19 @@ parametric_polymorphism :: proc() {
}
}
-threading_example :: proc() {
- @static prefix_table := [?]string{
- "White",
- "Red",
- "Green",
- "Blue",
- "Octarine",
- "Black",
- }
- @static print_mutex: sync.Mutex
+prefix_table := [?]string{
+ "White",
+ "Red",
+ "Green",
+ "Blue",
+ "Octarine",
+ "Black",
+}
+
+print_mutex := b64(false)
+threading_example :: proc() {
fmt.println("\n# threading_example")
did_acquire :: proc(m: ^b64) -> (acquired: bool) {
@@ -1161,10 +1161,12 @@ threading_example :: proc() {
task_proc :: proc(t: thread.Task) {
index := t.user_index % len(prefix_table)
for iteration in 1..=5 {
- if sync.guard(&print_mutex) {
- fmt.printf("Worker Task %d is on iteration %d\n", t.user_index, iteration)
- fmt.printf("`%s`: iteration %d\n", prefix_table[index], iteration)
- }
+ for !did_acquire(&print_mutex) { thread.yield() } // Allow one thread to print at a time.
+
+ fmt.printf("Worker Task %d is on iteration %d\n", t.user_index, iteration)
+ fmt.printf("`%s`: iteration %d\n", prefix_table[index], iteration)
+
+ print_mutex = false
time.sleep(1 * time.Millisecond)
}
@@ -1189,10 +1191,11 @@ threading_example :: proc() {
time.sleep(5 * time.Millisecond)
// Allow one thread to print at a time.
- sync.guard(&print_mutex)
+ for !did_acquire(&print_mutex) { thread.yield() }
thread.terminate(pool.threads[N - 1], 0)
fmt.println("Canceled last thread")
+ print_mutex = false
}
thread.pool_finish(&pool)