N个异步线程的互斥

Mic*_*ael 7 javascript multithreading asynchronous

我有一个异步应用程序,这意味着在任何给定时间都可以有N个事件.是否有一种已知的算法可以对N个线程进行互斥,而无需对每个线程进行硬编码以获得ID?

San*_*har 5

我不认为Javascript本身具有对象锁定 - 因为Javascript基本上是单线程的.您可能能够找到运行多个Javascript代码线程的库或实现 - 但它们是否都在相同的变量空间中运行?他们需要以某种方式相互沟通.

假设您的多个线程可以mutex以某种方式共享静态变量,并且只要您认为 ' ++'被认为是执行线程的系统的原子操作,那么这个怎么样?

int mutex = 0;
mutuallyExclusiveOperation(){
  succeed=false;
  while(!succeed){
    while(mutex>0){ sleep();  }
    m=mutex++;   //"Simultaneously" read and increment
    if(m>0)mutex--;
    else{
      doMutuallyExclusiveThing();
      succeed=true;
      mutex--;
    }
 }
}
Run Code Online (Sandbox Code Playgroud)