在多線程中編寫我的基本程序,遇到了一些困難。多線程程序中的輸出
在下面,如果我給位置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);
}