Linux程序多线程入门

实例1:进程和线程并行输出

/*************************************************************************
    > File Name: threadbase.c
    > Author: 
    > Mail:  
    > Created Time: 2015年12月04日 星期五 17时44分38秒
 ************************************************************************/

#include<stdio.h>
#include <string.h>
#include <stdlib.h>
#include <errno.h>
#include <pthread.h>

/*要执行的线程函数*/
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);
}

Linux程序多线程入门_第1张图片


实例2:在进程中使用等待线程的函数和线程退出函数

/*************************************************************************
    > File Name: threadbase.c
    > Author: 
    > Mail:  
    > Created Time: 2015年12月04日 星期五 17时44分38秒
 ************************************************************************/

#include<stdio.h>
#include <string.h>
#include <stdlib.h>
#include <errno.h>
#include <pthread.h>

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);
}

Linux程序多线程入门_第2张图片

实例3:创建多个线程,并向线程传递数据

/*************************************************************************
    > File Name: threadbase.c
    > Author: 
    > Mail:  
    > Created Time: 2015年12月04日 星期五 17时44分38秒
 ************************************************************************/

#include<stdio.h>
#include <string.h>
#include <stdlib.h>
#include <errno.h>

#include <pthread.h>

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);
}

Linux程序多线程入门_第3张图片

你可能感兴趣的:(多线程,linux)