function myobj(){
var gup=this;
this.lastindex=-1;
this.criticalSectionInTimer=0;
this.updateTimer;
this.start = function(l){
if((typeof this.updateTimer)=="number"){
clearInterval ( this.updateTimer );
}
this.updateTimer=setInterval(function() {gup.getMessages();} , 30);
}
this.stop= function(){
if((typeof this.updateTimer)=="number"){
clearInterval ( this.updateTimer );
}
}
this.addUpdate(i){
//some code
}
this.rrrrnr=0;
this.getMessages = function (){
if(this.criticalSection==0){
this.criticalSection=1;
this.rrrrnr++;
console.log("in critical section"+this.rrrrnr);
var url="getmessages.php?lastindex="+this.lastindex;
$.getJSON(url,
function(data){
gup.lastindex=data.lastindex;
$.each(data.updates, function(i,item){
gup.addUpdate(item);
});
}
);
console.log("out critical section"+this.rrrrnr);
this.criticalSection=0;
}
}
}
var m= new myobj();
myobj.start();
上記のコードがあります。特定の時間間隔で更新を行うメインループがあります。問題は、変数 this.criticalSection で区切られた「クリティカル セクション」に入ることに気付きました。
firebug から、「in critical section」+ index および「out critical section」+index というメッセージを正しい順序で取得しますが、ajax リクエストはまだ処理中です。しかし、同じインデックスでリクエストを受け取りましたが、どこで問題を探すべきか本当にわかりません。
javascript にセマフォまたはクリティカル セクション用のビルトイン機能はありますか?