1

ファイルからいくつかの数値を 5 つのスレッド (すべてのスレッドが 1 つの数値を読み取る) で読み取って、ファイル自体へのアクセスを同期する必要があります。スレッドがミューテックスとファイル ポインターを共有するように処理を進めるための一連の方法が同等かどうかを知りたかったのです。

1) グローバル変数として読み込むミューテックスとファイルを宣言する

#include <....>

pthread_mutex_t mtx = PTHREAD_MUTEX_INITIALIZER;
FILE *fp;

int main(int argc,char *argv[]){

    fp=open_file(argv[1]);
}

2) スレッドのデータ構造を定義し、メイン関数でそのフィールドをミューテックスとファイルに関連付ける

#include <....>

struct data
{
   pthread_t tid;
   pthread_mutex_t *ptmx;
   FILE *f;

  .....
}

int main(int argc,char* argv[])
{
   FILE *fp=open_file(argv[1]);
   struct data td[5];
   pthread_mutex_t mtx;

   pthread_mutex_init(&mtx,NULL)

   for(i=0;i<5;i++)
   {
      td[i].f=fp;
      td[i].ptmx=&mtx;
   }

   ....
}

簡単にするためにコードの一部のみを報告しましたが、ファイルは行コマンドで渡されると想定しています。

4

1 に答える 1

2

はい、これらは完全に同等です。

どちらの場合も、スレッドにはミューテックスとFILEポインターが表示され、同じ値を共有しています。

于 2013-09-01T15:58:24.327 に答える