线程传参
(1)pthread_create(&semop_threadID, NULL, semopFun, a); int类型地址赋值给void *
(2)num = (int *) param; void * 强制转换成 int *
运行结果
编译:g++ -o pthread pthread.cpp -lpthread
测试1
使用 pthread_join(semop_threadID, &p); 主线程阻塞,结果如下:
注释pthread_join(semop_threadID, &p); 主线程非阻塞,结果如下:
源代码
//g++ -o pthread pthread.cpp -lpthread
#include <stdio.h>
#include <pthread.h>
#include <time.h>
#include <iostream>
#include <unistd.h>
using namespace std;
// 函数的格式必须是这样的. void* name(void * param)
void *semopFun(void * param)
{
int * num= NULL;
num = (int *) param; // void * 强制转换成 int *
*num = 111;
while(1)
{
cout<<"Delay 3 seconds!"<<endl;
sleep(3);
*num = *num + 1;
cout << "<semopFun> the number is : " << *num <<endl;
cout<<"thread out"<<endl;
}
/*
线程结束后,传值出去,
给pthread_join()的参数2
*/
pthread_exit((void *)11);
}
int main()
{
int *a ;
*a = 100;
pthread_t semop_threadID = NULL;
/*
第一个参数为指向线程标识符的指针。
第二个参数用来设置线程属性。
第三个参数是线程运行函数的起始地址。
最后一个参数是运行函数的参数。
*/
//int类型地址赋值给void *
pthread_create(&semop_threadID, NULL, semopFun, a);
//cout << " NUM : " << *a <<endl;
/*
pthread_join
参数1:线程标识符
参数2:pthread_exit()参数返回
如果线程还未运行完毕主线程会被阻塞在此,不再向下执行.
*/
void *p = NULL;
pthread_join(semop_threadID, &p);
while(1)
{
sleep(2);
printf("Delay 2 seconds ! \n");
cout << "<main function> the number is : " << *a <<endl;
}
cout << "p: " <<(int*) p << endl;
cout << "OVER" << endl;
return 0;
}