【发布时间】:2018-06-28 15:31:34
【问题描述】:
不是一个完全严肃的问题,更像是一个淋浴的想法:JavaScript 的 await 关键字应该允许在您的平均“并发语言”中感觉非常像互斥锁的东西。
function Mutex() {
var self = this; // still unsure about how "this" is captured
var mtx = new Promise(t => t()); // fulfilled promise ≡ unlocked mutex
this.lock = async function() {
await mtx;
mtx = new Promise(t => {
self.unlock = () => t();
});
}
}
// Lock
await mutex.lock();
// Unlock
mutex.unlock();
这是一个正确的实现吗(除了正确的错误处理)?还有……我可以有 C++-RAII 风格的锁守卫吗?
【问题讨论】:
-
new Promise(t => t())=>Promise.resolve() -
如果你使用箭头函数,也不需要
var self = this;(因为你说你不确定)。
标签: javascript mutex