LinuxでC pthreadsを使用して、2つのスレッドがあります。1 つはデータを書き込み、もう 1 つはそれを読み取ります。変数を使用して、読み取りが許可されているときに読み取りスレッドを許可し、許可されているときに書き込みスレッドを許可しています。したがって、ミューテックスは「newData」と呼ばれるこのブール変数に適用されます。私の質問は、「if」条件内のアクセスの周りでミューテックスをロック/ロック解除する必要がありますか? どちらの方法でも機能しますが、この変数に対して書き込み/読み取りが重複する可能性が非常に低いという理由だけで考えています。私の質問をよりよく説明するために、両方の選択肢を示します。
スレッド 1:
pthread_mutex_lock( &lattice_mutex );
if (!newData) {
pthread_mutex_unlock( &lattice_mutex );
uchar *lattice_pos = lattice;
int i;
for(i=0; i<size; i++) {
*lattice_pos = rand()%CHAR_MAX;
lattice_pos++;
}
pthread_mutex_lock( &lattice_mutex );
newData = TRUE;
pthread_mutex_unlock( &lattice_mutex );
} else {
pthread_mutex_unlock( &lattice_mutex );
}
スレッド 2:
pthread_mutex_lock( &lattice_mutex );
if(newData) {
pthread_mutex_unlock( &lattice_mutex );
renderUpdate();
pthread_mutex_lock( &lattice_mutex );
newData = FALSE;
pthread_mutex_unlock( &lattice_mutex );
} else {
pthread_mutex_unlock( &lattice_mutex );
}
2 番目のバージョンは機能しますが、正しいかどうかはわかりません。
スレッド 1:
if (!newData) {
uchar *lattice_pos = lattice;
int i;
for(i=0; i<size; i++) {
*lattice_pos = rand()%CHAR_MAX;
lattice_pos++;
}
pthread_mutex_lock( &lattice_mutex );
newData = TRUE;
pthread_mutex_unlock( &lattice_mutex );
}
スレッド 2:
if(newData) {
renderUpdate();
pthread_mutex_lock( &lattice_mutex );
newData = FALSE;
pthread_mutex_unlock( &lattice_mutex );
}