c语言线程函数6 c语言线程创建函数( 二 )


注意,这个地方是个指针,要想传多个参数,可以定义一个结构体 , 把要传的参数包起来,传结构体的地址就ok
高手进,关于C语言在windows上建立多线程的问题(VC6.0上实现)东西 , 往往实例才是最让人感兴趣c语言线程函数6的 , 老是学基础理论 , 不动手,感觉没有成就感,呵呵 。
下面先来一个实例 。我们通过创建两个线程来实现对一个数c语言线程函数6的递加 。
或许这个实例没有实际运用的价值,但是稍微改动一下,我们就可以用到其他地方去拉 。
下面是我们的代码c语言线程函数6:
/*thread_example.c :c multiple thread programming in linux
*author : falcon
*E-mail : tunzhj03@st.lzu.edu.cn
*/
#include pthread.h
#include stdio.h
#include sys/time.h
#include string.h
#define MAX 10
pthread_t thread[2];
pthread_mutex_t mut;
int number="0", i;
void *thread1()
{
printf ("thread1 : I'm thread 1\n");
for (i = 0; iMAX; i++)
{
printf("thread1 : number = %d\n",number);
pthread_mutex_lock(mut);
number++;
pthread_mutex_unlock(mut);
sleep(2);
}
printf("thread1 :主函数在等我完成任务吗c语言线程函数6?\n");
pthread_exit(NULL);
}
void *thread2()
{
printf("thread2 : I'm thread 2\n");
for (i = 0; iMAX; i++)
{
printf("thread2 : number = %d\n",number);
pthread_mutex_lock(mut);
number++;
pthread_mutex_unlock(mut);
sleep(3);
}
printf("thread2 :主函数在等我完成任务吗?\n");
pthread_exit(NULL);
}
void thread_create(void)
{
int temp;
memset(thread, 0, sizeof(thread));//comment1
/*创建线程*/
if((temp = pthread_create(thread[0], NULL, thread1, NULL)) != 0)//comment2
printf("线程1创建失败!\n");
else
printf("线程1被创建\n");
if((temp = pthread_create(thread[1], NULL, thread2, NULL)) != 0)//comment3
printf("线程2创建失败");
else
printf("线程2被创建\n");
}
void thread_wait(void)
{
/*等待线程结束*/
if(thread[0] !=0) {//comment4
pthread_join(thread[0],NULL);
printf("线程1已经结束\n");
}
if(thread[1] !=0) {//comment5
pthread_join(thread[1],NULL);
printf("线程2已经结束\n");
}
}
int main()
{
/*用默认属性初始化互斥锁*/
pthread_mutex_init(mut,NULL);
printf("我是主函数哦,我正在创建线程,呵呵\n");
thread_create();
printf("我是主函数哦,我正在等待线程完成任务阿,呵呵\n");
thread_wait();
return 0;
}
下面我们先来编译、执行一下
引文:
falcon@falcon:~/program/c/code/ftp$ gcc -lpthread -o thread_example thread_example.c
falcon@falcon:~/program/c/code/ftp$ ./thread_example
我是主函数哦 , 我正在创建线程,呵呵
线程1被创建
线程2被创建
我是主函数哦,我正在等待线程完成任务阿 , 呵呵
thread1 : I'm thread 1
thread1 : number = 0
thread2 : I'm thread 2
thread2 : number = 1
thread1 : number = 2
thread2 : number = 3
thread1 : number = 4
thread2 : number = 5
thread1 : number = 6
thread1 : number = 7
thread2 : number = 8
thread1 : number = 9
thread2 : number = 10
thread1 :主函数在等我完成任务吗?
线程1已经结束
thread2 :主函数在等我完成任务吗?
线程2已经结束
实例代码里头的注释应该比较清楚c语言线程函数6了吧 , 下面我把网路上介绍上面涉及到的几个函数和变量给引用过来 。

推荐阅读