私は、2つのスレッド間でグローバルダイナミック整数配列を共有するマルチスレッドCプログラムを作成しています。 1つのスレッドはそれに要素を追加し続けます&もう1つは独立して配列をスキャンします&スキャンされた要素を解放します。 はいずれも私がやっていることは、デッドロック を作成しているので、またいずれかが、私は、スレッドのために十分な説明マルチスレッドとデッドロック
答えて
でそれ用のコードや、このデッドロックを解決する方法を提供することができますことを私が行うことができますどのような方法を提案することができますpthreadを使用します。 -pthread
でコンパイルしてください。ここで
#include <pthread.h>
int *array;
// return and argument should be `void *` for pthread
void *addfunction(void *p) {
// add to array
}
// same with this thread
void *scanfunction(void *p) {
// scan in array
}
int main(void) {
// pthread_t variable needed for pthread
pthread_t addfunction_t, scanfunction_t; // names are not important but use the same for pthread_create() and pthread_join()
// start the threads
pthread_create(&addfunction_t, NULL, addfunction, NULL); // the third argument is the function you want to call in this case addfunction()
pthread_create(&scanfunction_t, NULL, scanfunction, NULL); // same for scanfunction()
// wait until the threads are finish leave out to continue while threads are running
pthread_join(addfunction_t, NULL);
pthread_join(scanfunction_t, NULL);
// code after pthread_join will executed if threads aren't running anymore
}
は、pthreadのための良い例/チュートリアルです:このような場合には*klick*
にもこだわっています、より –
その私に何とか助けになるではなく、正確に –
、あなたは、アレイ上の各操作によって生成された周波数および負荷で調べる必要があります。たとえば、アレイが連続的にスキャンされているが、1時間に1回しか追加されていない場合は、読み込みロックの必要性を排除する、非常に遅くてレイテンシに敏感な書き込みメカニズムを見つけることができます。このような場合、ミューテックスを使用するすべてのアクセスをロックすることは非常に不十分です。 「スキャン」動作の詳細、特に持続時間と周波数なし
、それは良好なパフォーマンスのためのスレッドコミュニケーション戦略を提案することはできません。
EEは、障害の影響あるかわからないAnohterのもの - それは可能性のある新しい付加が実際に挿入される前に、しばらくの間、キューに入れられている場合、それは問題ではないかもしれない、または。
あなたは、恐らく、非常に貧弱なパフォーマンスを持つ「コンピュータ・サイエンス101」の答えをしたい場合は、ミューテックスを持つ配列へのすべてのアクセスをロックします。
がで書くために複数のスレッドがありますどのように私はあなたの答えをupvoting午前役立ついくつかをそのグローバル配列を読むことができるスレッドは1つだけであり、このタスクは連続しており、どのスレッドが書き込みを行っているのか、またどのスレッドが読み出しているのかはわかりません。 これを行うには、このや他の方法でこれを完了するために相互排除を使用する必要があります –
これ以上の提案 –
- 1. RWロックによるデッドロックとマルチスレッドのリストノードのデッドロック?
- 2. マルチスレッドで選択と更新ステートメントのためにデッドロックを解決する方法
- 3. Quartz.NETとデッドロック
- 4. この関数はマルチスレッド状態でデッドロックを引き起こしますか?
- 5. notifyallはC++マルチスレッドでは動作しません。デッドロックが発生する
- 6. Spring JPA + MySQLとデッドロック
- 7. デッドロック
- 8. マルチスレッドと一緒にマルチスレッドでログインする
- 9. コアデータコードとマルチスレッド
- 10. TransX WCFとマルチスレッド
- 11. Cマルチスレッドとリアルパス
- 12. C++マルチスレッドとイベント
- 13. TransactionScopeとマルチスレッド
- 14. スプリングとマルチスレッド
- 15. RxAndroidとマルチスレッド
- 16. シングルトンクラスとマルチスレッド
- 17. マルチスレッドとイベント
- 18. マルチスレッド化とGDB
- 19. エンティティフレームワークコアとマルチスレッド
- 20. .NETマルチスレッドとユニットテスト
- 21. NSManagedObjectContextsとマルチスレッド
- 22. FlaskマルチスレッドとPython
- 23. MVCとマルチスレッド
- 24. QOpenGLWidgetとマルチスレッド
- 25. C++:マルチスレッドと
- 26. タイマーとマルチスレッド
- 27. エンティティフレームワークとマルチスレッド
- 28. 同期とマルチスレッド
- 29. freeDiameterとマルチスレッド
- 30. PHPとマルチスレッド
いいえ、あなたのコードを投稿してください。あなたのコードを修正するのを助けることができます。 – nos
この質問にはそのまま回答することはできません。閉じる。 – usr
私はコードがまだありません、私は分析の途中にありますので、私はPOCも必要です。 –