Commit 511990c83b
2022-01-11 19:04:24
1 parent
9fa55aeChanged files (2)
lib
std
Thread
lib/std/Thread/Condition.zig
@@ -106,7 +106,7 @@ pub const AtomicCondition = struct {
.linux => {
switch (linux.getErrno(linux.futex_wait(
&cond.futex,
- linux.FUTEX_PRIVATE_FLAG | linux.FUTEX_WAIT,
+ linux.FUTEX.PRIVATE_FLAG | linux.FUTEX.WAIT,
0,
null,
))) {
@@ -128,7 +128,7 @@ pub const AtomicCondition = struct {
.linux => {
switch (linux.getErrno(linux.futex_wake(
&cond.futex,
- linux.FUTEX_PRIVATE_FLAG | linux.FUTEX_WAKE,
+ linux.FUTEX.PRIVATE_FLAG | linux.FUTEX.WAKE,
1,
))) {
.SUCCESS => {},
lib/std/Thread.zig
@@ -1151,3 +1151,27 @@ test "Thread.detach" {
event.wait();
try std.testing.expectEqual(value, 1);
}
+
+fn testWaitForSignal(mutex: *Mutex, cond: *Condition) void {
+ mutex.lock();
+ defer mutex.unlock();
+ cond.signal();
+ cond.wait(mutex);
+}
+
+test "Condition.signal" {
+ if (builtin.single_threaded) return error.SkipZigTest;
+
+ var mutex = Mutex{};
+ var cond = Condition{};
+
+ var thread: Thread = undefined;
+ {
+ mutex.lock();
+ defer mutex.unlock();
+ thread = try Thread.spawn(.{}, testWaitForSignal, .{ &mutex, &cond });
+ cond.wait(&mutex);
+ cond.signal();
+ }
+ thread.join();
+}