多线程间的同步
2013-10-29 13:53
169 查看
实例:
#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; i < MAX; i++) { printf("thread1 : number = %d\n",number); pthread_mutex_lock(&mut); number++; pthread_mutex_unlock(&mut); sleep(2); } printf("thread1 :主函数在等我完成任务吗?\n"); pthread_exit(NULL); } void *thread2() { printf("thread2 : I'm thread 2\n"); for (i = 0; i < MAX; 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 pthread_attr_t attr; pthread_attr_init(&attr); pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_JOINABLE); pthread_attr_setstacksize(&attr,256*1024);//设置线程的栈大小 //pthread_create默认分配栈大小为8M; /* 创建线程*/ if((temp = pthread_create(&thread[0], &attr, thread1, NULL)) != 0) //comment2 printf("线程1创建失败!\n"); else printf("线程1被创建\n"); if((temp = pthread_create(&thread[1], &attr, thread2, NULL)) != 0) //comment3 printf("线程2创建失败"); else printf("线程2被创建\n"); pthread_attr_destroy(&attr); } 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(); /* 销毁互斥锁*/ pthread_mutex_destroy(&mut); return 0; }
相关文章推荐
- 同步、异步、多线程与事件型综述
- C#多线程:使用ReaderWriterLock类实现多用户读/单用户写同步
- HELP,多线程通过同一个socket发送数据到服务端,socket底动会不会同步呢?
- Qt中的信号和槽之connect----多线程调用全解析(同步/异步)
- java基础——多线程(线程的同步互斥与通信)
- 多线程:C#线程同步lock,Monitor,Mutex,同步事件和等待句柄(上)
- 多线程状态下使用同步机制的本质原因
- 深入浅出多线程系列之五:一些同步构造(下篇)
- 多线程(5)同步
- iOS多线程的初步研究(十)-- dispatch同步
- 多线程 - 同步块
- Java多线程(八):锁对象Lock-同步问题更完美的处理方式
- [转]多线程编程之四——线程的同步
- 多线程编程之四——线程的同步
- 多线程之同步问题小结
- linux多线程学习(六)——信号量实现同步
- 多线程四————线程间同步问题研究
- 用delegate实现.NET应用程序的同步函数的异步调用-.NET多线程编程实践之一
- iOS多线程的初步研究(七、八、九)-- dispatch对象-- dispatch队列-- dispatch源-- dispatch同步
- Java多线程-并发工具类(一)同步屏障CyclicBarrier