多线程练习2
来源:互联网 发布:华为手机彻底删除数据 编辑:程序博客网 时间:2024/05/01 21:16
多线程练习:
两个线程一起打印数从1到9,线程1打印所有不是3的倍数的数,线程2打印3的倍数。
1.用互斥锁+条件变量的方法
2.用信号量的方法(代码中sleep的位置比较重要)
1.用互斥锁+条件变量的方法的代码
#include <pthread.h>#include <stdio.h>#include <stdlib.h>pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;/*初始化互斥锁*/pthread_cond_t cond = PTHREAD_COND_INITIALIZER;/*初始化条件变量*/void *thread1(void *);void *thread2(void *);int i=1;int main(void){ pthread_t t_a; pthread_t t_b; pthread_create(&t_a,NULL,thread2,(void *)NULL);/*创建进程t_a*/ pthread_create(&t_b,NULL,thread1,(void *)NULL); /*创建进程t_b*/ pthread_join(t_a, NULL); pthread_join(t_b, NULL);/*等待进程t_b结束*/ pthread_mutex_destroy(&mutex); pthread_cond_destroy(&cond); exit(0);}void *thread1(void *arg){ for(i=1;i<=9;i++) { pthread_mutex_lock(&mutex);/*锁住互斥量*/ if(i%3==0) pthread_cond_signal(&cond);/*条件改变,发送信号,通知t_b进程*/ else printf("thead1:%d\n",i); pthread_mutex_unlock(&mutex);/*解锁互斥量*/sleep(1);}}void *thread2(void *arg){ while(i<9) { pthread_mutex_lock(&mutex);if(i%3!=0) pthread_cond_wait(&cond,&mutex);/*等待*/ printf("thread2:%d\n",i); pthread_mutex_unlock(&mutex);sleep(1);}}
#include <pthread.h>#include <stdio.h>#include <semaphore.h>void *thread1(void *);void *thread2(void *);sem_t s[2];int i=1;int main(void){sem_init(&s[0], 0, 1);sem_init(&s[1], 0, 0);pthread_t t_a;pthread_t t_b;pthread_create(&t_a,NULL,thread2,(void *)NULL);/*创建进程t_a*/pthread_create(&t_b,NULL,thread1,(void *)NULL); /*创建进程t_b*/pthread_join(t_a, NULL);pthread_join(t_b, NULL);/*等待进程t_b结束*/return 0;}void *thread1(void *arg){for(i=1; i<=9; i++) {sem_wait(&s[0]);if(0 == i%3) {sem_post(&s[1]);sleep(1); } else {printf("thread 1, i = %d\n", i);sem_post(&s[0]);}}}void *thread2(void *arg){while(i < 9) {//sleep(1);sem_wait(&s[1]);printf("thread 2, i = %d\n", i);sem_post(&s[0]);}}
0 0
- 多线程练习2
- 多线程练习2
- Linux多线程练习2
- 多线程练习
- 多线程练习
- 多线程 练习
- 多线程练习
- 多线程练习
- 多线程练习
- 多线程练习
- 初学多线程练习2--下雪效果
- 一个多线程的练习
- java多线程练习
- 多线程初步练习
- 多线程练习----哲学家问题
- 多线程练习----生产者消费者
- Win32多线程编程练习
- 简单多线程练习
- java基础06
- MFC 调用 QT的dll QT内无法捕获回车键 & PostMessage向窗口发送Alt组合键
- Testing React Components
- vs2013 访问sql server 2014 并且遍历数据库
- Android运行时ART加载类和方法的过程分析
- 多线程练习2
- Leetcode-101. Symmetric Tree
- Android自定义属性,format详解
- yii框架中的分页
- Oracle 11g学习笔记--高级查询
- linux内核在线查看
- yii2的文件上传
- spring data jpa 关联查询返回自定义对象
- Ubuntu安装PyCharm编译器,用于ROS开发,python编程