質問

私には2人の独立したMATLAB労働者がいて、最初にデータを取得/保存し、2回目の読み取り(およびいくつかの計算などを行います)。

最初にハードディスクの.matファイルとしてデータを保存し、2番目はそこから読み取ります。 〜20秒かかります SAVE .matおよび8millisecとしてのこのデータ DELETE それ。データを保存する前に、最初に古いファイルを削除してから、新しいバージョンを保存します。

2番目のデータが存在することをどのように確認できますか is not corrupt?使うことができます exists しかし、それはデータが破損しているかどうかはわかりません。たとえば、2回目がデータを保存しているときに正確にデータを読み込もうとする場合、 exists パスですが LOAD 発言というエラーが発生します - データが破損しています。

ありがとう。

役に立ちましたか?

解決

いくつかの同期メカニズムがなければ、秒がチェックを完了してファイルの読み取りを開始するまでに、最初に再び書き始めたかもしれません。何らかのロックまたはミューテックスが必要です。

ベースMATLABの2つのオプション。

これがローカルファイルシステム上にある場合、データファイルの横にある別のロックファイルを使用して、データファイルへの同時アクセスを管理できます。 JavaのNio FileChannelおよびFilelockオブジェクトをMATLAB内から使用して、ロックファイルの最初のバイトをロックし、それをセマフォとして使用してデータファイルへのアクセスを制御するため、ライターが終了するまで逆に待機します。 (これがネットワークファイルシステム上にある場合、これを試してはいけません - ファイルロックは機能しているように見えるかもしれませんが、通常は正式にサポートされておらず、私の経験では信頼できません。)

または、あなたはあなたの周りに試して/キャッチするだけです load() 腐敗したファイルエラーが発生した場合は、電話をかけて一時停止し、再試行してください。 .matファイル形式は、作家がまだ書いている場合、部分的な読み取りを取得できないようなものです。その破損したファイルエラーが表示されます。したがって、これを怠zyな種類の衝突検出とバックオフとして使用できます。これは私が通常することです。

競合のウィンドウを削減するには、最初に同じディレクトリ内の一時ファイルに書き込むことを検討し、次に名前変更を使用して最終目的地に移動します。これにより、ファイルは20秒のデータライティングではなく、クイックファイルシステムの移動操作でのみ利用できません。複数の作家がいる場合は、衝突を避けるために、Tempファイル名にPIDとホスト名を貼り付けます。

他のヒント

2つのスレッド(RW)の間のクラシックリソース共有の問題のように聞こえます

要するに、労働者間の安全なコミュニケーションの方法を見つける必要があります。小切手 これはアウトです.

また、入力してみてください

showdemo( 'paralleldemo_communic_prof')

Matlabで

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top