0

テキストをバイナリ ファイルに自動保存する関数と、バイナリ ファイルから印刷する関数を含むバイナリ ファイルにテキストを保存するコードを書いています。pthread ロックと結合を組み込む必要があります。私たちは与えられました

 pthread_mutext_t mutex;
 pthread_t autosavethread;

グローバル変数として、インストラクターはpthreadまたはmutexが実際に何をするかについて話しませんでしたが、私はそれについて混乱しています. また、共有変数が変更または読み取られるたびにロックを使用する必要があることも理解しています (私の場合はバイナリ ファイルです)。しかし、ファイルの最後で pthread_join を使用することになっていますが、それが何をするのか、どの引数が使用されるのかわかりません。私はミューテックスとautosavethreadが閉じられているか、それに沿ったものになっていると推測していますが、それを書く方法がわかりません。誰でも私の理解を深めることができますか?

4

1 に答える 1

1

pthread には、joinable thread と detached thread の 2 種類があります。スレッドが単にタスクを取得し、タスクが完了すると消えてしまうようにしたい場合は、切り離されたスレッドが必要です。作成されたスレッドが割り当てられたジョブで終了したときに、作成されたスレッドと通信したい場合は、結合可能なスレッドを使用する必要があります。基本的に、親とその作成されたスレッドがスレッドの完了後に通信する必要がある場合に必要です。

pthread APIを呼び出すために正確に必要なものと、通信できるものをグーグルで検索するのは非常に困難です。

ただし、ここで言及したいことの 1 つは、結合可能なスレッドの場合、作成されたスレッドに対して pthread_join を明示的に呼び出す必要があるということです。そうしないと、深刻なメモリ リークが発生します。参加可能なスレッドがそのタスクを完了すると、スレッドは終了したように見えます (Linux では、/proc/PID/task/ フォルダーを確認できます。スレッドが完了すると、その下のエントリーは消えます)。ただし、このために割り当てられたリソースは結合可能なスレッド、つまりスタックは、プロセスのメモリ空間にまだ存在します。より多くの参加可能なスレッドが作成され、それらのタスクが完了すると、明示的に pthread_join を呼び出さない限り、各スレッドのスタックはプロセス空間に残されます。少しでもお役に立てば幸いです

于 2014-06-05T06:10:32.257 に答える