複数のスレッドの同期に問題があります。元のコードの方が大きいため、同期を「試行」するために行っていることの例のみを投稿します。基本的に、3つのスレッドが接続された重いプロセスがあり、スレッドをロック/ロック解除するために、各スレッドのミューテックス状態を変更する関数を使用します。このようなもの:
## thread.c ##
#include "thread.h"
extern int socks;
pthread_mutex_t sem = PTHREAD_MUTEX_INITIALIZER;
void lock()
{
pthread_mutex_lock(&sem);
}
void unlock()
{
pthread_mutex_unlock(&sem);
}
void* thread(void* arg)
{
printf("Socks: %d\n",socks);
lock();
lock();
printf("Unlocked\n");
return;
}
## main.c ##
#include "defines.h"
#include "thread.h"
int socks;
int main()
{
pthread_t tid;
socks= 9;
pthread_create(&tid, NULL, thread, NULL);
//sleep(2);
unlock();
pthread_join(tid,NULL);
}
コードを実行した後に得られるものは次のとおりです。
。/テスト
靴下:9
明らかに私はいくつかの概念が間違っていますが、問題を見つけることができません。スレッドはunlock()でロック解除されるべきではありませんか?ロック解除呼び出しの前にsleep(2)を使用すると、プログラムが機能するのはなぜですか?問題を回避するには、どちらの方法を使用すればよいですか?各コードは別々のファイルにあります。
前もって感謝します!PS:私のくだらない英語でごめんなさい!