私は4つのスレッドでA、B、C、Dと呼ばれる4つの処理をしています。私はA、B、C、DをA、B、C、Dの順に処理するためにmutexを使用します。これは私のコードですが、私のようには機能しません。彼らはどのように働くのですか?Cでマルチスレッドを使用するには?
#include <stdio.h>
#include <pthread.h>
void processA();
void processB();
void processC();
void processD();
pthread_mutex_t mutex;
void main(){
pthread_t thread1;
pthread_t thread2;
pthread_t thread3;
pthread_t thread4;
pthread_mutex_init(&mutex,NULL);
pthread_create(&thread1, NULL, (void *)&processA,NULL);
pthread_create(&thread2, NULL, (void *)&processB,NULL);
pthread_create(&thread3, NULL, (void *)&processC,NULL);
pthread_create(&thread4, NULL, (void *)&processD,NULL);
pthread_join(thread1, NULL);
pthread_join(thread2, NULL);
pthread_join(thread3, NULL);
pthread_join(thread4, NULL);
pthread_mutex_destroy(&mutex);
}
void processA()
{
while (1)
{
pthread_mutex_lock(&mutex);
printf("A \n");
pthread_mutex_unlock(&mutex);
}
}
void processB()
{
while (1)
{
pthread_mutex_lock(&mutex);
printf("B \n");
pthread_mutex_unlock(&mutex);
}
}
void processC()
{
while (1)
{
pthread_mutex_lock(&mutex);
printf("C \n");
pthread_mutex_unlock(&mutex);
}
}
void processD()
{
pthread_mutex_lock(&mutex);
while (1)
{
pthread_mutex_lock(&mutex);
printf("D \n");
pthread_mutex_unlock(&mutex);
}
}
あなたは最初に実行されるスレッドの制御権がありません。スレッドを同期させるには、別の方法を見つけ出す必要があります。条件変数は多分?または、複数のミューテックスを使用する必要がある場合はそれを使用しますか? –
プロセスを「順番に」実行したい場合は、スレッドやmutexを必要としません。ミューテックスは、複数のスレッドが同じ場所に書き込むのを防ぐために使用されます。 – DeiDei
無関係な注記: 'void processA();'宣言は引数を取らない関数 'processA'を宣言しません。定義されていない未知数の引数を取る関数を宣言します。 –