小白学c++のマルチスレッド関数の戻り値

2606 ワード

#include 
#include 
#include 
#include 

//pthread_mutex_t lock;
int ticketcount=5;

void* salewinds1(void* args)
{
	while(ticketcount>0)
	{
		printf("window1 start %d
",ticketcount); sleep(1); ticketcount--; printf("sale ticket finish:%d
",ticketcount); } } void* salewinds2(void* args) { while(ticketcount>0) { printf("windows2 start:%d
",ticketcount); sleep(1); ticketcount--; printf("sale finish:%d
",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
",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
val 1とval 2の値がゴミ値になりました
#include 
#include 
#include 
#include 

//pthread_mutex_t lock;
int ticketcount=5;

void* salewinds1(void* args)
{
	while(ticketcount>0)
	{
		printf("window1 start %d
",ticketcount); sleep(1); ticketcount--; printf("sale ticket finish:%d
",ticketcount); } return NULL; } void* salewinds2(void* args) { while(ticketcount>0) { printf("windows2 start:%d
",ticketcount); sleep(1); ticketcount--; printf("sale finish:%d
",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
",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