タグ付けされた質問 「race-condition」

18
競合状態とは何ですか?
マルチスレッドアプリケーションを作成するときに発生する最も一般的な問題の1つは、競合状態です。 コミュニティへの私の質問は次のとおりです。 競合状態とは何ですか? それらをどのように検出しますか? それらをどのように扱いますか? 最後に、それらの発生をどのように防止しますか?

8
!=チェックスレッドは安全ですか?
などの複合操作i++は複数の操作を伴うため、スレッドセーフではありません。 しかし、それ自体で参照をチェックすることはスレッドセーフな操作ですか? a != a //is this thread-safe 私はこれをプログラムして複数のスレッドを使用しようとしましたが、失敗しませんでした。私のマシンではレースをシミュレートできなかったと思います。 編集: public class TestThreadSafety { private Object a = new Object(); public static void main(String[] args) { final TestThreadSafety instance = new TestThreadSafety(); Thread testingReferenceThread = new Thread(new Runnable() { @Override public void run() { long countOfIterations = 0L; while(true){ boolean …

5
スレッド間で共有変数を変更するコードが競合状態の影響を受けないのはなぜですか?
私はCygwin GCCを使用しており、次のコードを実行します。 #include <iostream> #include <thread> #include <vector> using namespace std; unsigned u = 0; void foo() { u++; } int main() { vector<thread> threads; for(int i = 0; i < 1000; i++) { threads.push_back (thread (foo)); } for (auto& t : threads) t.join(); cout << u << endl; return …

5
WordPressデータベースから最後に挿入された行IDを取得する方法は?
私のWordPressプラグインには、 IDと呼ばれるAUTO_INCREMENT主キーフィールドをます。新しい行がテーブルに挿入されたときに、挿入のID値を取得したいと思います。 機能は、AJAXを使用してデータをサーバーにポストし、DBに挿入することです。AJAX応答で新しい行IDが返され、クライアントのステータスが更新されます。複数のクライアントが同時にサーバーにデータを送信している可能性があります。そのため、各AJAX要求が応答として正確な新しい行IDを取得することを確認する必要があります。 PHPには、この機能用のmysql_insert_idというメソッドがありますが、引数が最後の操作のlink_identifierである場合にのみ、競合状態に対して有効です。データベースの操作は$ wpdbで行います。link_identifierを抽出する方法$ wpdbから mysql_insert_idが機能することを確認ですか?$ wpdbから最後に挿入された行のIDを取得する他の方法はありますか? ありがとう。

2
WebViewがsnapshot()の準備ができるのはいつですか?
JavaFXのドキュメント状態WebView時に準備ができているWorker.State.SUCCEEDEDに達しているしばらくの間(すなわち待たない限り、しかしAnimation、Transition、PauseTransition、など)を、空白のページが表示されます。 これは、キャプチャの準備ができているWebView内で発生するイベントがあることを示唆していますが、それは何ですか? あります7,000以上のコードスニペットは、GitHubの上でその使用SwingFXUtils.fromFXImageが、それらのほとんどがどちらかに無関係と思われるWebView、インタラクティブ(ヒトマスクは競合状態)であるか、(100ミリ秒から2,000msまでの任意の場所)任意のトランジションを使用しています。 私はもう試した: の寸法changed(...)内からリッスンしますWebView(高さと幅のプロパティDoublePropertyはObservableValue、これらのものを監視できます) 🚫実行できません。場合によっては、値がペイントルーチンとは別に変化して、部分的なコンテンツになることがあります。 runLater(...)FXアプリケーションスレッドで何でもすべてを盲目的に伝える。 techniques多くの手法でこれを使用していますが、私自身の単体テスト(および他の開発者からの素晴らしいフィードバック)は、イベントがすでに正しいスレッドにあることが多く、この呼び出しは冗長であることを説明しています。私が考えることができる最高のものは、それがいくつかのために働くキューイングを通しての遅延のちょうど十分な追加です。 DOMリスナー/トリガーまたはJavaScriptリスナー/トリガーを WebView SUCCEEDED空白のキャプチャにもかかわらず、が呼び出されると、JavaScriptとDOMの両方が正しく読み込まれているようです。DOM / JavaScriptリスナーは役に立たないようです。 AnimationまたはTransitionを使用して、メインFXスレッドをブロックせずに効果的に「スリープ」します。 ⚠️このアプローチは機能し、遅延が十分に長い場合、ユニットテストの最大100%を生み出すことができますが、遷移時間は、私たちが推測していて設計が悪い将来の瞬間のようです。パフォーマンスの高いアプリケーションやミッションクリティカルなアプリケーションの場合、これはプログラマーにスピードと信頼性のどちらかをトレードオフすることを強制します。 いつ電話するのがいいWebView.snapshot(...)ですか? 使用法: SnapshotRaceCondition.initialize(); BufferedImage bufferedImage = SnapshotRaceCondition.capture("<html style='background-color: red;'><h1>TEST</h1></html>"); /** * Notes: * - The color is to observe the otherwise non-obvious cropping that occurs * with some techniques, such as `setPrefWidth`, `autosize`, etc. * …

3
list :: empty()マルチスレッドの動作?
さまざまなスレッドが要素を取得するためのリストがあります。リストが空のときに保護しているmutexをロックしないようにするために、ロックするempty()前にチェックします。 呼び出しがlist::empty()100%正しくない場合でも問題ありません。同時list::push()およびlist::pop()コールのクラッシュまたは中断を回避したいだけです。 私はVC ++とGnu GCCが時々empty()間違って、何も悪いことはないと思い込んでも大丈夫ですか? if(list.empty() == false){ // unprotected by mutex, okay if incorrect sometimes mutex.lock(); if(list.empty() == false){ // check again while locked to be certain element = list.back(); list.pop_back(); } mutex.unlock(); }
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.