1.创建一个多线程程序,至少有10个子线程,
每个线程有会打印不同的数据,同时表明身份
cs
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <pthread.h>
typedef void* (*PFUN)(void* );
void* th1(void*arg)
{
printf("subthread id%lu\n",pthread_self());
pthread_exit(0);
}
void* th2(void*arg)
{
printf("subthread id%lu\n",pthread_self());
pthread_exit(0);
}
void* th3(void*arg)
{
printf("subthread id%lu\n",pthread_self());
pthread_exit(0);
}
int main(int argc, char *argv[])
{
int i = 0 ;
PFUN th[5]={th1,th2,th3,th2,th1};
pthread_t tid[5]={0};
for(i = 0 ;i<5;i++)
{
pthread_create(&tid[i],NULL,th[i],NULL);
}
for(i=0;i<5;i++)
{
pthread_join(tid[i],NULL);
}
return 0;
}
typedef strcut
{
float a;
float b;
char c;//+ - * /
float d;
}JSQ;
主线程,接收一个表达式,填充结构体,传递给th1线程,th1线程结算结果,并返回给主线程。主线程输出结果。
cs
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <pthread.h>
typedef struct
{
float a;
float b;
char c;//+ - * /
float d;
}JSQ;
void* th3(void*arg)
{
printf("subthread id%lu\n",pthread_self());
JSQ*tmp = (JSQ*)arg;
switch(tmp->c)
{
case '+' :
tmp->d = tmp->a+tmp->b;
break;
case '-' :
tmp->d = tmp->a-tmp->b;
break;
case '*' :
tmp->d = tmp->a*tmp->b;
break;
case '/' :
tmp->d = tmp->a/tmp->b;
break;
}
pthread_exit(tmp);
}
int main(int argc, char *argv[])
{
int i = 0 ;
pthread_t tid;
JSQ jsq;
// 2.3 + 5.4 atof;
jsq.a =2.3;
jsq.b = 5.4;
jsq.c = '+';
pthread_create(&tid,NULL,th3,&jsq);
void* ret;
pthread_join(tid,&ret);
printf("result is %f\n", ((JSQ*)ret)->d);
return 0;
}