シンプルな JavaScript ミューテックス ロックの共有_JavaScript スキル
昨年、JavaScript ミューテックス ロックの使用を必要とするプロジェクトがいくつかあったため、これはそれらの 1 つです。
//Published by Indream Luo
//Contact: indreamluo@qq.com
//Version: Chinese 1.0.0
!function ($) {
window.indream = window.indream || {};
$.indream = indream;
indream.async = {
) .push(action);
//ロックが使用されていない場合、現在のアクションはロックをブロックします
if (!$.indream.async.lockStatus[ lock] && action) {
$.indream .async.lockStatus[lock] = true;
if (arguments.length > 2) {
var args = 'arguments[2]';
for(var i = 3; i< arguments .length; i){
args = '、arguments [' i ']';
args ')'); /lock: ロック番号
その後、待機キューを実行します。それ以外の場合は、
if ($ .indream.async.waitings [lock] .Length) {
$ .indream.async.waitings [lock] [0] のロックを解除します。 ]();
} else {
🎜> lockstatus:[]、
//
(lock、action){
$ .indream.async.waitings [code] = $。 indream.async.waitings[code] || [];
$.indream.async.waitings[code].push (アクション);
},
//
: {
//
listen: function (actionName , callback) {
sync var list = $.indream.a .アクション.コールバック。 list;
list[actionName] = list[actionName] || [];
.push(callback );
},
args) {
var list = $.indream.async .action.callback .list;
if (list[actionName] && list[actionName].length) {
for (var i in list[actionName]) {
indream.async.action.call( list[ actionName][i], args);
//既存の呼び出しバックリスト
//
リスト: []
}、
(arguments.length > 1) 🎜> var args = 'arguments[1]';
for (var i = 2; i
}
}
}
}(window.jQuery);
ミューテックスの要素は次のとおりです:
•ロックとロック解除
•待機キュー
•実行方法
上記ロックの用途:
コードは次のとおりです:
//ロックの名前を定義します
//lock を使用します
});
この実装の実装についての簡単な説明。
-スピンロックまたはセマフォ
JavaScript 自体にはロック機能がないため、すべてのロックは高レベルで実装されます。
JavaScript のシングルスレッド原則によれば、JS のスレッド リソースは非常に限られており、スピン ロックの使用は非常に不向きであるため、セマフォを使用することにしました。
スピン ロックの実装は大まかに次のようになります。もちろん、do while の方が便利です。
while(true) {
/ /何かをしてください ...}
これは必然的にスレッド リソースを占有しますが、残念ながら、JS には実行用のスレッドが 1 つしかないため、これは非常に不適切です。もちろん、必要に応じて、setIntervalとclearIntervalの組み合わせを選択して実装することもでき、効果は良好です。
ここではセマフォ方式が使用されており、原理はシンプルでコードも短いです。作業の実行順序は大まかに次のとおりです:
• コード セグメント (コールバック アクション) を待機キューにプッシュします
• 現在のロックが保持されているかどうかを判断し、保持されている場合は解放を待ち、そうでない場合はロックを取得してコールバックを実行します
•ロックが保持されている場合、解放し、待機キュー内の次のコールバックをシフトアウトし、それにロックを渡し、
-自動リリースまたは手動リリース
もちろん、最も快適な方法は、ロックして、現在のプログラムの実行時に自動的にリリースすることですが、カスタマイズされたリリース シナリオが必要な状況がより多く存在するため、これは簡単ではありません。 。
ロックを使用するメソッドは非同期であるため、AJAX や jQuery アニメーションなど、他のさまざまな非同期コンテンツが通常表示されます。現時点では、自動リリースは要件を満たしていません。実際には、実際の「実行が完了する」のは内部の非同期コールバックが完了した後であるため、つまり、基本的に開発者のみが制御できるため、ここでは手動リリースが選択されています。
しかし、依然として欠陥があり、リリースが繰り返されています。
ローカル変数がアクセス レベルで分離されていない限り、すべてのロック オブジェクトがパブリックであることがわかります。または、すべての JS オブジェクトがパブリックであると言うべきです。ただし、ここでの「ロック」自体は公共のリソースであるため、対処する方法はありません。
ここで実行できる最適化は、setInterval や clearInterval のように、パブリック ロック名でロックし、プライベート ロック ID でロックを解除して、繰り返しリリースされないようにする必要があります。ただし、上記の古いコードには含まれていないため、すぐに使用されると推定されます。

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック











JavaScript文字列置換法とFAQの詳細な説明 この記事では、javaScriptの文字列文字を置き換える2つの方法について説明します:内部JavaScriptコードとWebページの内部HTML。 JavaScriptコード内の文字列を交換します 最も直接的な方法は、置換()メソッドを使用することです。 str = str.replace( "find"、 "置換"); この方法は、最初の一致のみを置き換えます。すべての一致を置き換えるには、正規表現を使用して、グローバルフラグGを追加します。 str = str.replace(/fi

それで、あなたはここで、Ajaxと呼ばれるこのことについてすべてを学ぶ準備ができています。しかし、それは正確には何ですか? Ajaxという用語は、動的でインタラクティブなWebコンテンツを作成するために使用されるテクノロジーのゆるいグループ化を指します。 Ajaxという用語は、もともとJesse Jによって造られました

10の楽しいjQueryゲームプラグインして、あなたのウェブサイトをより魅力的にし、ユーザーの粘着性を高めます! Flashは依然としてカジュアルなWebゲームを開発するのに最適なソフトウェアですが、jQueryは驚くべき効果を生み出すこともできます。また、純粋なアクションフラッシュゲームに匹敵するものではありませんが、場合によってはブラウザで予期せぬ楽しみもできます。 jquery tic toeゲーム ゲームプログラミングの「Hello World」には、JQueryバージョンがあります。 ソースコード jQueryクレイジーワードコンポジションゲーム これは空白のゲームであり、単語の文脈を知らないために奇妙な結果を生み出すことができます。 ソースコード jquery鉱山の掃引ゲーム

記事では、JavaScriptライブラリの作成、公開、および維持について説明し、計画、開発、テスト、ドキュメント、およびプロモーション戦略に焦点を当てています。

このチュートリアルでは、jQueryを使用して魅惑的な視差の背景効果を作成する方法を示しています。 見事な視覚的な深さを作成するレイヤー画像を備えたヘッダーバナーを構築します。 更新されたプラグインは、jQuery 1.6.4以降で動作します。 ダウンロードしてください

この記事では、ブラウザでJavaScriptのパフォーマンスを最適化するための戦略について説明し、実行時間の短縮、ページの負荷速度への影響を最小限に抑えることに焦点を当てています。

この記事では、JQueryとAjaxを使用して5秒ごとにDivのコンテンツを自動的に更新する方法を示しています。 この例は、RSSフィードからの最新のブログ投稿と、最後の更新タイムスタンプを取得して表示します。 読み込み画像はオプションです

Matter.jsは、JavaScriptで書かれた2D Rigid Body Physics Engineです。このライブラリは、ブラウザで2D物理学を簡単にシミュレートするのに役立ちます。剛体を作成し、質量、面積、密度などの物理的特性を割り当てる機能など、多くの機能を提供します。また、重力摩擦など、さまざまな種類の衝突や力をシミュレートすることもできます。 Matter.jsは、すべての主流ブラウザをサポートしています。さらに、タッチを検出し、応答性が高いため、モバイルデバイスに適しています。これらの機能はすべて、物理ベースの2Dゲームまたはシミュレーションを簡単に作成できるため、エンジンの使用方法を学ぶために時間をかける価値があります。このチュートリアルでは、このライブラリのインストールや使用法を含むこのライブラリの基本を取り上げ、
