📅  最后修改于: 2023-12-03 15:16:07.623000             🧑  作者: Mango
JavaScript | Atomics.wait() 方法是JavaScript中一个原子操作方法,它允许一个线程等待一个共享锁。
Atomics.wait(typedArray, index, value[, timeout])
必需。一个类型化数组,它作为锁资源。
必需。 在typedArray中锁可用的位置。
必需。等待状态的目标值
可选。等待的时间值,以毫秒为单位。如果超时,返回timeout。如果未指定,默认值为Inifinity。
等待过程会阻塞当前线程,时间到了或等待原子变量的值不等于指定值,返回等待过程是否成功。
let sharedBuffer = new SharedArrayBuffer(4);
let int32Array = new Int32Array(sharedBuffer);
//线程A修改数据
Atomics.store(int32Array, 0, 123);
//线程B等待数据修改完成
Atomics.wait(int32Array, 0, 123);
//线程C定时等待数据修改完成
setTimeout(()=>{
Atomics.wake(int32Array, 0, 1); //唤醒线程B
}, 1000)
上面的代码中,线程A将int32Array第一个位置的值设置为123。然后线程B调用Atomics.wait()等待该值为123。线程C在1秒后调用Atomics.wake() 唤醒等待的线程B。
JavaScript | Atomics.wait() 方法提供了一种有效和安全的方法来等待共享资源的修改。它允许线程阻塞,直到共享数据被修改,从而避免了同时访问共享资源的竞争。尽管它的使用有一些限制,但它在使用自旋锁(TypedArray)时确实非常有效。