2017-10-21 8 views
0

これは簡単な作業のようですが、うまくいきません。私のスレッド関数はループで実行され、常にデータを配列に書き込みます。しかし、時には私の主な機能からこのデータを読みたいと思っています。したがって、読み込み機能は理想的にはスレッドを一時停止し、データを読み込み、スレッドを再開する必要があります。しかし、読み取られた値は正しくなく、壊れているようです。たぶん間違った何かがあります:pthread読み取り/書き込み同期

スレッド-FCT:

void read_data() 
{ 
    printf("Daten: %f\n", data[0]); 
} 
+1

詳細を表示する必要があります。最初にミューテックスを取得せずに実際にデータを読み込みますか? –

+0

std :: threadを使用します。 –

+0

@FlorianWeimerが暗示しているのは、両方のスレッドがクリティカルセクションに入る前にミューテックスを使用しようとしている場合にのみ、ミューテックスが動作することです。 – CplusPuzzle

答えて

0

試してみてください。

void threadfct() 
{ 
    while (1) 
    { 
     pthread_mutex_lock(&mutex); 
     data = write_data(); 
     pthread_mutex_unlock(&mutex); 
    } 
} 

メインループから呼び出される関数はスレッド機能によって書かれているデータを読み込む必要がありますこの変更:

void read_data() 
{ 
    pthread_mutex_lock(&mutex); 
    printf("Daten: %f\n", data[0]); 
    pthread_mutex_unlock(&mutex); 
} 
+0

私はしましたが、私のプログラムの実行を妨げるようです。 – Lemonbonbon

+0

@ Lemonbonbon次に別のミューテックスをロックしましたか? –

+1

あなたのプログラム、スレッドの作成方法、見たいもの、実際に見られるものについて詳しく教えてください – CplusPuzzle

関連する問題