小白学c++之多线程函数返回值

#include 
#include 
#include 
#include 

//pthread_mutex_t lock;
int ticketcount=5;

void* salewinds1(void* args)
{
	while(ticketcount>0)
	{
		printf("window1 start %d\n",ticketcount);
		sleep(1);
		ticketcount--;
		printf("sale ticket finish:%d\n",ticketcount);
	}
}

void* salewinds2(void* args)
{
	while(ticketcount>0)
	{
		printf("windows2 start:%d\n",ticketcount);
		sleep(1);
		ticketcount--;
		printf("sale finish:%d\n",ticketcount);
	}
}


int main(int argc,const char* argv[])
{

	pthread_t thd1;
	pthread_t thd2;
	int val1=1;
	int val2=2;
	//pthread_mutex_init(&lock,NULL);
	
	pthread_create(&thd1,NULL,salewinds1,NULL);
	pthread_create(&thd2,NULL,salewinds2,NULL);
	pthread_join(thd1,(void**)&val1);
	pthread_join(thd2,(void**)&val2);

	printf("val1:%d....val2:%d\n",val1,val2);
	//pthread_mutex_destroy(&lock);
	return 0;
}

这段代码的运行结果为:

windows2 start:5
window1 start 5
sale finish:4
windows2 start:4
sale ticket finish:3
window1 start 3
sale finish:2
windows2 start:2
sale ticket finish:1
window1 start 1
sale finish:0
sale ticket finish:-1
val1:-256....val2:0

val1和val2的值变成了垃圾值

#include 
#include 
#include 
#include 

//pthread_mutex_t lock;
int ticketcount=5;

void* salewinds1(void* args)
{
	while(ticketcount>0)
	{
		printf("window1 start %d\n",ticketcount);
		sleep(1);
		ticketcount--;
		printf("sale ticket finish:%d\n",ticketcount);
	}
	return NULL;
}

void* salewinds2(void* args)
{
	while(ticketcount>0)
	{
		printf("windows2 start:%d\n",ticketcount);
		sleep(1);
		ticketcount--;
		printf("sale finish:%d\n",ticketcount);
	}
	return NULL;
}


int main(int argc,const char* argv[])
{

	pthread_t thd1;
	pthread_t thd2;
	int val1=1;
	int val2=2;
	//pthread_mutex_init(&lock,NULL);
	
	pthread_create(&thd1,NULL,salewinds1,NULL);
	pthread_create(&thd2,NULL,salewinds2,NULL);
	pthread_join(thd1,(void**)&val1);
	pthread_join(thd2,(void**)&val2);

	printf("val1:%d....val2:%d\n",val1,val2);
	//pthread_mutex_destroy(&lock);
	return 0;
}

运行结果为:

windows2 start:5
window1 start 5
sale finish:4
windows2 start:4
sale ticket finish:3
window1 start 3
sale finish:2
windows2 start:2
sale ticket finish:1
window1 start 1
sale finish:0
sale ticket finish:-1
val1:0....val2:0


你可能感兴趣的:(WD)