菜鸟Linux 线程问题
#include <stdio.h>
#include <pthread.h>
#include <unistd.h>
#include <stdlib.h>
void thread1(void){
int i;
for(i=0;i <3;i++){printf("1");
//sleep(1);
}
}
void thread2(void){
int i;
for(i=0;i <3;i++){printf("2");
//sleep(1);
}
}
int main(){
pthread_t id1,id2;
int i,ret;
ret=pthread_create(&id1,NULL,(void*)thread1,NULL);
if(ret!=0){
printf("erro create thread1!");
exit(1);
}
ret=pthread_create(&id2,NULL,(void*)thread2,NULL);
if(ret!=0){
printf("erro create thread2!");
exit(1);
}
pthread_join(id1,NULL);
pthread_join(id2,NULL);
}
在ubuntu下,怎么貌似两个线程间没有竞争关系,总是一个线程输出完后另一个才输出,加入sleep()后,貌似是主进程都sleep了,在5~6秒后,打印出交替输出的结果,为什么????还望牛人赐教
默认情况下标准输出流是行缓冲
只有遇到 "\n" 、超过最大缓冲及程序结束才输出
额~输出是由于这个问题,但是为什么两个线程之间不用sleep就没有竞争关系呢?还望再一步赐教
会不会是cpu分配的时间片啊,要不多循环几次试试。
现在cpu的速度,就这点活还竞争?
自己的时间片就能全部做完了
未加入sleep(1),每个线程的打印之间无间隔,这几行代码在OS分配的一个时间片内早已做完,所以结果不可能出现交替。其实出现了竞争只是你没有发现
相关问答:
Linux新手,请大哥大姐不要见笑。
我用root用户登录到Linux系统。在根目录下面建了目录dir1,后用命令cd /dir1进入到dir1目录下,然后再用mkdir dir2建立了目录dir2 ,再后来用命令cd /dir2是,提示为:-bush ......
我目前在本地的linux上写了一个swing的界面,想通过这个界面来控制其它电脑的linux重启。
我知道用Runtime.getRuntime().exec("shutdown -r");可以控制本机Linux重启,但是怎么控制远程的linux重启呢? ......
一直用svn来做资源的管理,
现在发现windows下取svn 要10个小时左右(资源大约有20G,全是小文件)
linux下取仅用40分钟,
请问linux的文件系统在哪儿比windows文件系统强力?
svn 可够慢的。
在 ......
我们隶属中科院计算所网络重点实验室(http://www.ict.ac.cn/survey/channel/detail443.asp)基础设施课题组.
现因项目和业务拓展的需要,特需要招聘与项目相关的网络应用工程师1-2名。
具体要求如下。有意者 ......
我用RPM报安装了一个老版本的JRE,后来想装新版本的,
不过,我把/usr/java目录直接给删了,
后再安装的时候,总是提示版本冲突,
而且我用RPM包卸载时也找不到文件了。
我对LINUX不熟悉,希望高手帮忙。
http: ......