diff --git a/core/thread/thread_unix.odin b/core/thread/thread_unix.odin index b2718487a..6bf64f1e5 100644 --- a/core/thread/thread_unix.odin +++ b/core/thread/thread_unix.odin @@ -156,6 +156,13 @@ join :: proc(t: ^Thread) { } } +join_multiple :: proc(threads: ..^Thread) { + for t in threads { + join(t); + } +} + + destroy :: proc(t: ^Thread) { join(t); t.unix_thread = {}; diff --git a/core/thread/thread_windows.odin b/core/thread/thread_windows.odin index 5d0a4600c..749fedfb3 100644 --- a/core/thread/thread_windows.odin +++ b/core/thread/thread_windows.odin @@ -85,6 +85,30 @@ join :: proc(using thread: ^Thread) { } } +join_multiple :: proc(threads: ..^Thread) { + MAXIMUM_WAIT_OBJECTS :: 64; + + handles: [MAXIMUM_WAIT_OBJECTS]win32.HANDLE; + + for k := 0; k < len(threads); k += MAXIMUM_WAIT_OBJECTS { + count := min(len(threads) - k, MAXIMUM_WAIT_OBJECTS); + n, j := u32(0), 0; + for i in 0..