Back to Blog

多线程同步与互斥

#多线程#null#join

1.互斥

#include <stdio.h>#include <stdlib.h>#include <unistd.h>#include <pthread.h>#include <errno.h> pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;int lock_var = 0;time_t end_time; void pthread1(void *arg);void pthread2(void *arg); int main(int argc, char *argv[]){	pthread_t id1,id2;	pthread_t mon_th_id;	int ret; 	end_time = time(NULL)+10;		pthread_mutex_init(&mutex,NULL);		ret=pthread_create(&id1,NULL,(void *)pthread1, NULL);	if(ret!=0)		perror("pthread cread1");		ret=pthread_create(&id2,NULL,(void *)pthread2, NULL);	if(ret!=0)		perror("pthread cread2");		pthread_join(id1,NULL);	pthread_join(id2,NULL);		exit(0);} void pthread1(void *arg){	int i;	while(time(NULL) < end_time)	{		if(pthread_mutex_lock(&mutex)!=0)		{			perror("pthread_mutex_lock");		}		else			printf("pthread1:pthread1 lock the variable\n");				for(i=0;i<2;i++)		{			sleep(1);			lock_var++;		}				if(pthread_mutex_unlock(&mutex)!=0)		{			perror("pthread_mutex_unlock");		}		else			printf("pthread1:pthread1 unlock the variable\n");				sleep(1);	}} void pthread2(void *arg){	int nolock=0;	int ret;		while(time(NULL) < end_time)	{		ret=pthread_mutex_trylock(&mutex);		if(ret==EBUSY)			printf("pthread2:the variable is locked by pthread1\n");		else		{			if(ret!=0)			{				perror("pthread_mutex_trylock");				exit(1);			}			else				printf("pthread2:pthread2 got lock.The variable is %d\n",lock_var);			if(pthread_mutex_unlock(&mutex)!=0)			{				perror("pthread_mutex_unlock");			}			 else				printf("pthread2:pthread2 unlock the variable\n");		}		sleep(3);	}}