Fix sync and thread on *nix

This commit is contained in:
gingerBill
2020-06-22 13:32:58 +01:00
parent b3c51a8b44
commit 0ab356aa4e
2 changed files with 6 additions and 2 deletions

View File

@@ -81,7 +81,7 @@ condition_signal :: proc(c: ^Condition) -> bool {
// Awaken all threads who are waiting on the condition
condition_broadcast :: proc(c: ^Condition) -> bool {
return pthread_cond_broadcast(&c.handle) == 0;
return unix.pthread_cond_broadcast(&c.handle) == 0;
}
// Wait for the condition to be signalled.

View File

@@ -20,6 +20,7 @@ Thread_Os_Specific :: struct #align 16 {
// signal to start it.
// destroyed after thread is started.
start_gate: sync.Condition,
start_mutex: sync.Mutex,
// if true, the thread has been started and the start_gate has been destroyed.
started: bool,
@@ -48,7 +49,9 @@ create :: proc(procedure: Thread_Proc, priority := Thread_Priority.Normal) -> ^T
t := (^Thread)(t);
sync.condition_wait_for(&t.start_gate);
sync.condition_destroy(&t.start_gate);
sync.mutex_destroy(&t.start_mutex);
t.start_gate = {};
t.start_mutex = {};
c := context;
if ic, ok := t.init_context.?; ok {
@@ -96,7 +99,8 @@ create :: proc(procedure: Thread_Proc, priority := Thread_Priority.Normal) -> ^T
res = unix.pthread_attr_setschedparam(&attrs, &params);
assert(res == 0);
sync.condition_init(&thread.start_gate);
sync.mutex_init(&thread.start_mutex);
sync.condition_init(&thread.start_gate, &thread.start_mutex);
if unix.pthread_create(&thread.unix_thread, &attrs, __linux_thread_entry_proc, thread) != 0 {
free(thread);
return nil;