スレッドの実行時間を照会しますか?

擬似コード:

flag = FALSE;

func1()
   sleep(30);
   flag = TRUE;
   ...


func2()
  if (FALSE == flag)
  {  printf("Wait for %d seconds", xyz);
     return;
  }
  ...

1つのスレッドはfunc1()を実行し、別のスレッドはfunc2()を実行します。 私は睡眠を待っている正確な時間を知りたいと思っています。これはfunc2経由でユーザーに表示できます。方法はありますか?スレッドの実行時間を取得するにはスレッドIDを指定しますか?

現在、次のようなことをしています:

flag = FALSE;
time_t start;

func1()
   time(&start);
   sleep(30);
   flag = TRUE;
   ...


func2()
  time_t now;
  if (FALSE == flag)
     { time(&now); 
       printf("Wait for %d seconds", (int)(30-(now-start)));
       return;
     }
  ...

上記は妥当に見えますか?

  • Linux 2.6+
  • getrusage()とclock_gettime()は過剰に見えます。関連するpthread APIはありますか?
  • スリープコールを中断するためにシグナルを使用したくない。

ご意見/ご提案ありがとうございます。

0
これは、スレッド化されたプログラムを書く正しい方法ではありません。同期プリミティブを使用する必要があります。書かれているように、 flag がtrueに設定されていると、あなたの他のスレッドが変更を参照するという保証はありません...また、特にマルチスレッドの sleep プログラムは、あなたが何か間違っていることをあなたに示唆すべきです...
追加された 著者 R..,
表示されたコードスニペットは、同期なしで flag にアクセスします。
追加された 著者 R..,
コードは同期プリミティブを使用します。しかし、この場合、使用中のスレッドは2つしかなく、開始時にフラグステータスを使用してスリープ待機が行われたかどうかを判断します。基本的には、初期化が完了するまで待つ必要があります。ご意見ありがとうございます。
追加された 著者 user138645,

答えはありません

0