マルチスレッドで基本的なプログラムを書いていますが、いくつかの問題に直面しています。
以下のプログラムでは、位置 1 でスリープすると、出力される共有データの値は常に 10 になり、位置 2 でスリープを維持すると、共有データの値は常に 0 になります。
なぜこの種の出力が来るのですか?どの場所で寝るかを決める方法。これは、ミューテックス内にスリープを配置している場合、他のスレッドがまったく実行されていないため、共有データが 0 であることを意味しますか?
#include <pthread.h>
#include <stdio.h>
#include <stdlib.h>
#include<unistd.h>
pthread_mutex_t lock;
int shared_data = 0;
void * function(void *arg)
{
int i ;
for(i =0; i < 10; i++)
{
pthread_mutex_lock(&lock);
shared_data++;
pthread_mutex_unlock(&lock);
}
pthread_exit(NULL);
}
int main()
{
pthread_t thread;
void * exit_status;
int i;
pthread_mutex_init(&lock, NULL);
i = pthread_create(&thread, NULL, function, NULL);
for(i =0; i < 10; i++)
{
sleep(1); //POSITION 1
pthread_mutex_lock(&lock);
//sleep(1); //POSITION 2
printf("Shared data value is %d\n", shared_data);
pthread_mutex_unlock(&lock);
}
pthread_join(thread, &exit_status);
pthread_mutex_destroy(&lock);
}