ホーム>source

例えば:

pthread_mutex_lock();
//Do something
sleep(1);                //causes issues waiting while holding lock
pthread_mutex_unlock();

相互排他ロック内でスリープを使用したくない場合の解決策は何ですか

あなたの答え
  • 解決した方法 # 1

    経験則として、通常(常にではありませんが)ミューテックスを長時間保持したくない(そうでない場合、同じミューテックスをロックしている他のスレッドは長く待機します)、1秒は長い期間です1秒間に数十億の基本演算を行うプロセッサの場合。

    条件変数を使用することもできます(pthread_cond_waitは原子的に mutexを解放する)、または sleep を実行する  (または、poll(2)...)ロックされた領域外。 Linuxでは、pipe(7)-sまたは安価ですがLinux固有のeventfd(2)を使用して、イベントループを実行しているスレッド間で通信することもできます。

    コベリティスタティックソースアナライザーはヒューリスティックであり、誤ったアラームを生成する場合があります。

    良いPthreadチュートリアルを読んでください。

  • 前へ java - JPAクエリ:サブクエリをグループ化条件に結合する
  • 次へ Google Drive PHP API:削除は不十分な許可を示します