// Main is sharing the buffer with the worker; the worker is clearing // the buffer.
mem[0] = 42;
mem[1] = 37;
mem[2] = DEBUG;
setSharedObject(mem.buffer);
evalInWorker(` var mem = new Int32Array(getSharedObject()); function dprint(s) { if (mem[2]) print(s);
}
assertEq(mem[0], 42); // what was written in the main thread
assertEq(mem[1], 37); // is read in the worker
mem[1] = 1337;
dprint("Sleeping for 2 seconds");
sleep(2);
dprint("Waking the main thread now");
setSharedObject(null);
assertEq(Atomics.notify(mem, 0, 1), 1); // Can fail spuriously but very unlikely
`);
var then = Date.now();
assertEq(Atomics.wait(mem, 0, 42), "ok");
dprint("Woke up as I should have in " + (Date.now() - then)/1000 + "s");
assertEq(mem[1], 1337); // what was written in the worker is read in the main thread
assertEq(getSharedObject(), null); // The worker's clearing of the mbx is visible
evalInWorker(` var mem = new Int32Array(getSharedObject());
sleep(2); // Probably long enough to avoid a spurious error next
assertEq(Atomics.notify(mem, 0), 1); // Last argument to notify should default to +Infinity
`);
var then = Date.now();
dprint("Main thread waiting on wakeup (2s)");
assertEq(Atomics.wait(mem, 0, 42), "ok");
dprint("Woke up as I should have in " + (Date.now() - then)/1000 + "s");
// A tricky case: while in the wait there will be an interrupt, and in // the interrupt handler we will execute a wait. This is // explicitly prohibited (for now), so there should be a catchable exception.
var exn = false;
timeout(2, function () {
dprint("In the interrupt, starting inner wait with timeout 2s"); try {
Atomics.wait(mem, 0, 42); // Should throw
} catch (e) {
dprint("Got the interrupt exception!");
exn = true;
} returntrue;
}); try {
dprint("Starting outer wait");
assertEq(Atomics.wait(mem, 0, 42, 5000), "timed-out");
} finally {
timeout(-1);
}
assertEq(exn, true);
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.