diff options
| author | Jeroen van Rijn <Kelimion@users.noreply.github.com> | 2022-08-05 15:03:09 +0200 |
|---|---|---|
| committer | Jeroen van Rijn <Kelimion@users.noreply.github.com> | 2022-08-05 15:03:09 +0200 |
| commit | edba99d6360802da152a850056e6754cfed25d27 (patch) | |
| tree | 4b5ab20c707a2519c9bb81ce4430042fb4ea32f8 /examples | |
| parent | 35674959f2198cb7de2150c090ed6bb73720cae8 (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.odin | 43 |
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) |