#include <stdlib.h>
#include <pthread.h>
#include <unistd.h>
#include <iostream>
using namespace std;
/*线程参数传递
1.创建的多个线程并不保证哪个线程先运行
2.不能用全局变量代替线程函数的参数
3.数据类型的强制转换
*/
void *thmain1(void *arg);
void *thmain2(void *arg);
void *thmain3(void *arg);
void *thmain4(void *arg);
void *thmain5(void *arg);
int var = 0;
int main(int argc, char *argv[])
{
/*
3.数据类型的强制转换
int i = 10;
void *pv = 0; //指针占内存8字节,用于存放变量的地址
//pv = i; //错误:从类型‘int’到类型‘void*’的转换无效
//pv = (void *)i; //警告:将一个整数转换为大小不同的指针
pv = (void *)(long)i; //编译通过pv = 0xa, 先把i转换为long,再转为void*
printf("pv = %p\n", pv);
int j = 0;
//j = pv; //错误:从类型‘void*’到类型‘int’的转换无效
//j = (int)pv; //错误:从‘void*’到‘int’的转换损失精度
j = (int)(long)pv; //先将pv存放的内容转为long, 再转为int
printf("j = %d\n", j); //j = 10
return 0;
*/
pthread_t thid1=0, thid2=0, thid3=0;
pthread_t thid4=0, thid5=0;
//创建线程 给每一个线程传参数,如果传相同的地址是不行的, 传不同的地址OK
int *var1 = new int; *var1 = 1;
if(pthread_create(&thid1, NULL, thmain1, var1) != 0) {printf("thid1 faile\n");}
int *var2 = new int; *var2 = 2;
if(pthread_create(&thid2, NULL, thmain2, var2) != 0) {printf("thid2 faile\n");}
int *var3 = new int; *var3 = 3;
if(pthread_create(&thid3, NULL, thmain3, var3) != 0) {printf("thid3 faile\n");}
int *var4 = new int; *var4 = 4;
if(pthread_create(&thid4, NULL, thmain4, var4) != 0) {printf("thid4 faile\n");}
int *var5 = new int; *var5 = 5;
if(pthread_create(&thid5, NULL, thmain5, var5) != 0) {printf("thid5 faile\n");}
//等待子线程退出
cout << "thmain start..." << endl;
pthread_join(thid1, NULL); //主线程等待子线程退出
pthread_join(thid2, NULL);
pthread_join(thid3, NULL);
pthread_join(thid4, NULL);
pthread_join(thid5, NULL);
cout << "thmain end " << endl;
return 0;
}
void *thmain1( void *arg)
{
printf("var1 = %d\n", *(int*)arg);
delete (int *)arg; //释放内存
printf("thmain1 start...\n");
}
void *thmain2( void *arg)
{
printf("var2 = %d\n", *(int*)arg);
delete (int *)arg; //释放内存
printf("thmain2 start...\n");
}
void *thmain3( void *arg)
{
printf("var3 = %d\n", *(int*)arg);
delete (int *)arg; //释放内存
printf("thmain3 start...\n");
}
void *thmain4( void *arg)
{
printf("var4 = %d\n", *(int*)arg);
delete (int *)arg; //释放内存
printf("thmain4 start...\n");
}
void *thmain5( void *arg)
{
printf("var5 = %d\n", *(int*)arg);
delete (int *)arg; //释放内存
printf("thmain5 start...\n");
}