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