实例1:进程和线程并行输出
/*************************************************************************
> File Name: threadbase.c
> Author:
> Mail:
> Created Time: 2015年12月04日 星期五 17时44分38秒
************************************************************************/
#include
#include
#include
#include
#include
/*要执行的线程函数*/
void *thread_routine(void *arg)
{
printf("i am a thread, my thread id is : %ld\n", pthread_self());
int i = 0;
for (i = 1; i < 11; ++i){
printf("thread i = %d\n", i);
fflush(stdout);
sleep(1);
}
printf("thread exit\n");
}
int main()
{
pthread_t tid;
int ret = 0;
ret = pthread_create(&tid, NULL, thread_routine, NULL);//创建一个线程
if(ret != 0){
printf("pthread_create error\n");
exit(0);
}
int i = 0;
for (i = 1; i < 11; ++i){
printf("main i = %d\n", i);
fflush(stdout);
sleep(1);
}
sleep(2);//等待线程退出,如果线程还在执行,但是进程退出,那么线程也会退出
printf("parent exit\n");
exit(0);
}
实例2:在进程中使用等待线程的函数和线程退出函数
/*************************************************************************
> File Name: threadbase.c
> Author:
> Mail:
> Created Time: 2015年12月04日 星期五 17时44分38秒
************************************************************************/
#include
#include
#include
#include
#include
void *thread_routine(void *arg)
{
printf("i am a thread, my thread id is : %ld\n", pthread_self());
int i = 0;
for (i = 1; i < 11; ++i){
printf("thread i = %d\n", i);
fflush(stdout);
sleep(1);
}
sleep(3);
printf("child exit\n");
pthread_exit(NULL);//线程结束函数
}
int main()
{
pthread_t tid;
int ret = 0;
ret = pthread_create(&tid, NULL, thread_routine, NULL);
if(ret != 0){
printf("pthread_create error\n");
exit(0);
}
int i = 0;
for (i = 1; i < 11; ++i){
printf("main i = %d\n", i);
fflush(stdout);
sleep(1);
}
pthread_join(tid, NULL);//等待线程退出
printf("parent exit\n");
exit(0);
}
实例3:创建多个线程,并向线程传递数据
/*************************************************************************
> File Name: threadbase.c
> Author:
> Mail:
> Created Time: 2015年12月04日 星期五 17时44分38秒
************************************************************************/
#include
#include
#include
#include
#include
typedef struct Threadinfo{
char name[64];
int age;
int numId;
}ThreadInfo;
int nNum, nLoop;
void *thread_routine(void *arg)
{
int i = 0;
//pthread_detach(pthread_self());
ThreadInfo * p = (ThreadInfo *)arg;
for (i = 0; i < nLoop; ++i){
printf("thread id is :%ld, i = %d, numid is %d\n", pthread_self(), i, p->numId);
}
printf("child exit: %ld\n", pthread_self());
pthread_exit(arg);
}
int main()
{
int i = 0;
pthread_t tidArray[200];
ThreadInfo tmp[200];
printf("input the number of thread:");
scanf("%d", &nNum);
printf("input the number of nLoop:");
scanf("%d", &nLoop);
int ret = 0;
for (i = 0; i < nNum; ++i){
memset(&tmp[i], 0, sizeof(ThreadInfo));
tmp[i].numId= i;
pthread_create(&tidArray[i], NULL, thread_routine, &tmp[i]);
}
for (i = 0; i < nNum; ++i){
pthread_join(tidArray[i], NULL);
}
printf("parent exit\n");
exit(0);
}