linux进程的问题
2016-04-19 23:19
253 查看
#include <stdlib.h> #include <stdio.h> #include <unistd.h> #include <pthread.h> #include <errno.h> pthread_mutex_t lock; void fun1(void){ int i = 0; while(i<100){ printf("A\n");i++; } } void fun2(void){ int i = 0; while(i<100){ printf("B\n");i++; } } int main(){ pthread_create(&tida, NULL, (void*)fun1, NULL); pthread_create(&tidb, NULL, (void*)fun2, NULL); pthread_join(tida, NULL); pthread_join(tidb, NULL); return 0; }
这个代码,创建了两个线程,分别输出100个A和100个B,但是输出结果很奇怪。
都是BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA。
也就是说先完成了B线程,再完成A线程。
说好的线程抢占CPU呢?
想了很久都没发现答案。。
最后发现是,输出100个A需要的时间太短了。A线程抢到了CPU。在一个时间片里面输出100次A后,时间还足够。所以造成了这个假象。
然后我把循环扩大到100000次,让整个循环不能在一个时间片里面完成,就可以出现交替了。
另一个方法是,用usleep函数,让单次运行得就一点。
不过这还是看个人的电脑
我同学在mac pro上是ABABABA这样输出的。
但我的ubuntu虚拟机确实AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB。
所以以后大家注意这一点。就算用了互斥量或者信号量,都得sleep
很奇怪的问题
相关文章推荐
- CentOS 7安装Chrome浏览器
- Linux零基础入学之1-4 Linux文件管理-xfs文件系统的备份恢复-服务器来电后自动开机
- centos 6 yum源记录,离线下载rpm包的办法
- Linux驱动开发-14、串行设备驱动模型
- centos6.7配置git服务器
- SUSE Linux设置时区
- 实习过程中linux相关开发学习总结(一)
- Smart210学习记录-------linux内核模块
- 【Linux】CentOS6.X最小化安装配置
- (三)SQLite在Windows和Linux上安装及使用例程
- Linux简单设备驱动(2): file_operations的write、read、ioctl驱动及Android应用层开发验证
- centos7下yum安装mysql
- linux常用命令
- linux的查询时间实现秒定时+gettimeofday()函数的用法
- Linux多线程高速下载
- Linux rpm 命令参数使用详解[介绍和应用]
- R语言前期准备之LINUX下安装
- Linux下配置JavaWeb环境(持续更新其他软件)
- Linux内核中实现保留内存的方法
- CentOS安装nexus