linux多线程之信号量---疯狂打印abcd
来源:互联网 发布:php 字符串拼接函数 编辑:程序博客网 时间:2024/06/05 08:15
#include <stdio.h>#include <pthread.h>#include <fcntl.h>#include <semaphore.h>sem_t sem[4];void *handle(void *arg);int main(){ pthread_t tid[4]; int i; for(i=0;i<4;i++) { if(i==0) sem_init(&sem[i],0,1); //0号线程信号量初始值为1,保证开始时0号线程先打印; else sem_init(&sem[i],0,1); //1.2.3号线程信号量初始值为0; pthread_create(&tid[i],NULL,handle,&i); } for(i=0;i<4;i++) { pthread_join(tid[i],NULL); sem_destory(&sem[i]); } return 0; } void *handle(void *arg) { char a='a'; int k=*((int *)arg); while(1) { sem_wait(&sem[k]); //本线程信号量将减至0; printf("%c",a+k); sem_post(&sem[(k+1)%4]);//将下一个线程的信号量加至1,保证按顺序打印; } }以上是完整代码,一个小问题,假如把handle函数改为如下所示,就会出错,why? void *handle(void *arg) { while(1) { char a='a'; int k=*((int *)arg); sem_wait(&sem[k]); //本线程信号量将减至0; printf("%c",a+k); sem_post(&sem[(k+1)%4]);//将下一个线程的信号量加至1,保证按顺序打印; } }
阅读全文
0 0
- linux多线程之信号量---疯狂打印abcd
- 多线程(打印ABCD)
- java多线程顺序打印ABCD四个字母
- java wait notify notifyAll and 多线程顺序打印ABCD
- linux多线程----信号量
- linux多线程----信号量
- linux多线程 --信号量
- Linux多线程编程-信号量
- C#多线程之信号量
- 多线程编程之信号量
- 多线程之使用信号量
- 多线程同步之信号量
- linux 多线程编程 之 信号量互斥同步
- linux 多线程编程 之 信号量互斥同步
- linux 多线程编程 之 信号量互斥同步
- linux 多线程编程 之 信号量互斥同步
- linux多线程学习笔记三---线程同步之信号量
- Linux多线程编程之同步对象编程:线程信号量
- opencart
- 炫酷的技巧,屌炸的人生(查看命令行完整的输出内容)
- 统计专业人数
- Netty in action—ChannelHandler和ChannelPipeline
- Sqlyog之excel数据导入方法
- linux多线程之信号量---疯狂打印abcd
- webrtc中的线程
- 简单说 CSS变量
- Unity3D 监控面板显示数据(Inspector)
- poj1952 BUY LOW, BUY LOWER(最长递减子序列及个数)
- C# Automapper使用例
- 算法:互斥集合
- 完成一个 " 打开QQ,进入QQ空间,然后退出 " 的case
- Web前端开发神器-WebStorm