Add wait_group_wait_with_timeout; Allow Sema to be implemented as a Wait_Group

This commit is contained in:
gingerBill
2021-10-11 20:14:26 +01:00
parent 0d258e8b55
commit 753acc6971
2 changed files with 24 additions and 48 deletions
+20
View File
@@ -1,5 +1,7 @@
package sync2
import "core:time"
// A Wait_Group waits for a collection of threads to finish
//
// A Wait_Group must not be copied after first use
@@ -45,6 +47,24 @@ wait_group_wait :: proc(wg: ^Wait_Group) {
}
}
wait_group_wait_with_timeout :: proc(wg: ^Wait_Group, duration: time.Duration) -> bool {
if duration <= 0 {
return false
}
mutex_lock(&wg.mutex)
defer mutex_unlock(&wg.mutex)
if wg.counter != 0 {
if !cond_wait_with_timeout(&wg.cond, &wg.mutex, duration) {
return false
}
if wg.counter != 0 {
panic("sync.Wait_Group misuse: sync.wait_group_add called concurrently with sync.wait_group_wait")
}
}
return true
}
// A barrier enabling multiple threads to synchronize the beginning of some computation