mirror of
https://github.com/Ed94/Odin.git
synced 2026-08-04 14:48:47 +00:00
Merge pull request #1786 from Kelimion/thread_fix
Fix thread pool join.
This commit is contained in:
@@ -39,6 +39,7 @@ Pool :: struct {
|
|||||||
|
|
||||||
threads: []^Thread,
|
threads: []^Thread,
|
||||||
|
|
||||||
|
|
||||||
tasks: [dynamic]Task,
|
tasks: [dynamic]Task,
|
||||||
tasks_done: [dynamic]Task,
|
tasks_done: [dynamic]Task,
|
||||||
}
|
}
|
||||||
@@ -102,8 +103,19 @@ pool_join :: proc(pool: ^Pool) {
|
|||||||
|
|
||||||
yield()
|
yield()
|
||||||
|
|
||||||
for t in pool.threads {
|
// Because we already stopped the pool, there's no need to take a lock here.
|
||||||
join(t)
|
|
||||||
|
started_count: int
|
||||||
|
for started_count < len(pool.threads) {
|
||||||
|
started_count = 0
|
||||||
|
for t in pool.threads {
|
||||||
|
if .Started in t.flags {
|
||||||
|
started_count += 1
|
||||||
|
}
|
||||||
|
if .Joined not_in t.flags {
|
||||||
|
join(t)
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user