易截截图软件、单文件、免安装、纯绿色、仅160KB

菜鸟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、PHP网络应用开发

我们隶属中科院计算所网络重点实验室(http://www.ict.ac.cn/survey/channel/detail443.asp)基础设施课题组.
现因项目和业务拓展的需要,特需要招聘与项目相关的网络应用工程师1-2名。

具体要求如下。有意者 ......

linux一个sleep的奇怪问题,高手来给解答下了

while(1)
{
    time_t now;
    time(&now);
    struct tm* pt=localtime(&now);
    cout < < "当前时间" < < pt->t ......

Linux如何在图形界面和命令行之间切换 [

各位大虾,我正在学习Linux,可是Linux图形界面和命令行之间切换遇到困难,在命令行下输入startx,不是进入图形界面 
而是出现
请问各位,这是为什么? 而且按Ctrl+Alt+F7,也不能命令行进入图形界面。&nbs ......

LINUX下卸载JDK问题

我用RPM报安装了一个老版本的JRE,后来想装新版本的,
不过,我把/usr/java目录直接给删了,
后再安装的时候,总是提示版本冲突,
而且我用RPM包卸载时也找不到文件了。
我对LINUX不熟悉,希望高手帮忙。
http: ......
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号