一个简单的互斥锁的例子
2011-10-25 01:42
309 查看
/*thread_example.c : c multiple thread programming in linux */ #include<stdio.h> #include<stdlib.h> #include<pthread.h> #include<memory.h> #define MAX1 10 #define MAX2 30 pthread_t thread[2]; pthread_mutex_t mut; int number=0, i; void *thread1() { printf ("thread1 : I'm thread 1\n"); for (i = 0; i < MAX1; i++) { printf("thread1 : number = %d i=%d\n",number,i); pthread_mutex_lock(&mut); number++; pthread_mutex_unlock(&mut); sleep(2); } printf("thread1 :Is main function waiting for me acomplishing task? \n"); pthread_exit(NULL); } void *thread2() { printf("thread2 : I'm thread 2\n"); for (i = 0; i < MAX2; i++) { printf("thread2 : number = %d i=%d\n",number,i); pthread_mutex_lock(&mut); number++; pthread_mutex_unlock(&mut); sleep(3); } printf("thread2 :Is main function waiting for me to acomplish task ?\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("Thread 1 is established\n"); if((temp = pthread_create(&thread[1], NULL, thread2, NULL)) != 0) //comment3 printf("线程2创建失败"); else printf("Thread 2 is established\n"); } void thread_wait(void) { /*等待线程结束*/ if(thread[0] !=0) { //comment4 pthread_join(thread[0],NULL); printf("Thread 1 is over \n"); } if(thread[1] !=0) { //comment5 pthread_join(thread[1],NULL); printf("Thread 2 is over\n"); } } int main() { /*用默认属性初始化互斥锁*/ pthread_mutex_init(&mut,NULL); printf("I am the main funtion,and I am establishing threads. Ha-ha\n"); thread_create(); printf("I am the main funtion,and I am waiting for thread to accomplish task. Ha-ha\n"); thread_wait(); return 0; }
相关文章推荐
- WCF 一步一步从入门到精通 建立一个简单入门的例子(适合一点不会的朋友阅读)
- 一个使用spring的最简单的例子。
- 一个简单的Docbook 5.0例子
- 一个简单的cmock例子
- 自制简单的Java下载器——来自《Java高级编程》的一个关于线程的例子(带上部分注释)
- multiple inheritance 一个简单的例子
- 一个简单的JSF例子
- heritrix的一个简单例子
- Oracle_C# 实现 Oracle Text(全文检索)的一个简单例子
- SVM实现多分类的程序基础工作(二)——通过一个简单libsvm例子迈入libsvm学习的大门
- c#中子线程控制进度条的一个简单例子
- python hard way中的一个小例子,简单的游戏引擎
- C# Remoting的一个简单例子
- [Android]一个简单使用Handler做Timer的例子
- Struts2学习笔记(二):最简单的一个例子
- 一个简单的演示SQL2005的查询通知的例子
- 一个自写的共享内存简单的例子,学习原理之用
- [转]一个简单的Linux多线程例子 带你洞悉互斥量 信号量 条件变量编程
- 一个最简单的socket通信的例子
- 关于ExpandableListView用法的一个简单小例子