在多线程中编写我的基本程序,遇到了一些困难。多线程程序中的输出
在下面,如果我给位置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);
}