当前位置:  技术问答>linux和unix

文件里明明没有存入0这个数,为什么读文件时出现了?哪里出现了问题,紧急求助各位大神。。。。(linux操作系统 多线程同步)

    来源: 互联网  发布时间:2017-05-18

    本文导语:  本帖最后由 u011921487 于 2014-05-06 21:31:58 编辑 源代码如下: #include  #include  #include  #define MAX 20 int Data[MAX][2];/*读取操作数时用*/ int size=0; sem_t sem;/*信号量*/ /* 从文件1.txt读取数据,每读一次,信号量加一,表示可...

本帖最后由 u011921487 于 2014-05-06 21:31:58 编辑
源代码如下:

#include 
#include 
#include 
#define MAX 20

int Data[MAX][2];/*读取操作数时用*/
int size=0;
sem_t sem;/*信号量*/

/* 从文件1.txt读取数据,每读一次,信号量加一,表示可用资源增加*/
void ReadFile1(){
FILE *fp=fopen("1.txt","r");/*文件1.txt 是之sem_wait(&sem1);/*保证每次读数据都互斥*/
while(!feof(fp)){/*再文件没结束之前一直读数据*/
fscanf(fp,"%d %d",&Data[size][0],&Data[size][1]);/*每次读两个*/
sem_post(&sem);/*每读一次,同步信号量 加一,表示可用资源增加*/
size++;/*执行时由于各线程间的竞争导致size值会被任意修改,因此不会按照文件内的元顺序读出,加法与乘法运算每次也是随机的*/
}
fclose(fp);
}
/*从文件2.txt读取数据*/
void ReadFile2(){
FILE *fp=fopen("2.txt","r");
while(!feof(fp)){
fscanf(fp,"%d %d",&Data[size][0],&Data[size][1]);
sem_post(&sem);
size++;
}
fclose(fp);
}
/*阻塞等待缓冲区有数据,读取数据后,释放空间,继续等待*/
void Plus(){
while(1){
sem_wait(&sem);
printf("Plus:%d+%d=%dn",Data[size][0],Data[size][1],
Data[size][0]+Data[size][1]);
size--;
}
}
void Multiply(){
while(1){
sem_wait(&sem);/*直到资源被用完,否则(在线程切换之前)一直执行*/
printf("Multiply:%d*%d=%dn",Data[size][0],Data[size][1],
Data[size][0]*Data[size][1]);
size--;
}
}
void main(){
pthread_t t1,t2,t3,t4;
sem_init(&sem,0,0); /*第二个参数为零,表示信号量只能在当前进程的所有线程间共享;第三个参数为零,sem=0,多线程可同步,资源共享*/

pthread_create(&t1,NULL,(void *)ReadFile1,NULL);
pthread_create(&t2,NULL,(void *)ReadFile2,NULL);
pthread_create(&t3,NULL,(void *)Plus,NULL);
pthread_create(&t4,NULL,(void *)Multiply,NULL);

/*防止程序过早退出,让它在此无限期等待(如果没有则运行时没有结果显示。。。。。。)*/
pthread_join(t3,NULL);
}


运行结果:文件里明明没有存入0这个数,为什么读文件时出现了?哪里出现了问题,紧急求助各位大神。。。。(linux操作系统 多线程同步)[图片]
文件 1.txt 里存的是 1 2 3 4 5 6 7 
文件 2.txt                  -1 -2 -3 -4 -5 -6 -7
明明文件里没有 0 这数啊 ,为什么执行的时候出现这么多 0 的操作???????
望各位大神指点迷津 小弟感激不尽!

|
ReadFile1、 ReadFile2 写 Data 没有保护吧

|


ReadFile1/ReadFile2 两个线程可能同时操作 Data 数组 

    
 
 

您可能感兴趣的文章:

  • 编译内核时出现同名文件该怎么解决
  • 用resin+smartupload上传大文件时出现问题。。。。。。(50分)
  • fwrite写文件时出现乱码
  • 在装LINUX时出现未找到创建新文件的有效设备
  • 解析XML文件时出现如下错误,请教大家可能是什么原因???
  • 移动文件时出现 Directory not empty错误是什么意思?
  • 下载spca5xx.o文件到开发板中,加载时出现了一点问题
  • 执行一个自己开发的一个./cmdsubmit可执行文件时出现: /usr/lib/libstdc++.so.5: version `GLIBCPP_3.2.2' not found (required by ./cmd
  • linux gcc时出现读写文件的error
  • 求助:使用jaxp中的dom接口解析xml文件时出现错误(不会迟于5月23日结账)
  • 比较详细的完美解决安装sql2000时出现以前的某个程序安装已在安装计算机上创建挂起的文件操作。 原创
  • linux启动时出现文件系统检测错误,请问如何解决?谢谢
  • doc文件上传后,下载时出现的问题?希望得到指点
  • 用sevrlet打开一个PDF文件时出现的问题?
  • 我昨天刚学java用的是JBuilder可是我用F9运行之后在classes目录中生成的.class文件为什么我在用java.exe application1时出现如下的错误呢
  • 文件编译时出现multiple definition of 'xxxxxx'的具体解决方法
  • 获取硬件信息的源代码:在遍历文件链表时出现段错误,请高手指教!
  • !!紧急求助!包含内核头文件时出现大量的错误!!!!!!!!!不甚感谢!!!!!!
  • 紧急求助!包含内核头文件时出现大量的错误!!!!!!!!!不甚感谢!!!!!!
  • 利用模块,在/proc文件系统下创建文件,并读写时出现错误
  • 急!跪求大神赐教。fedora16 grub文件丢失
  • shell脚本怎样控制文件的大小,路过的大神们进来看看,感谢!
  • 懂linux 下 XML 文件解析的大神进来帮我看看
  • 文件写入读取小程序,希望各位大神帮忙修改一下~~~
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • C++ I/O 成员 eof():如果处于文件结尾处则返回true
  • Shell脚本如何递归现实一个文件夹中的文件(文件夹中含有文件夹)
  • WinDows8最新版文件夹加密
  • 求命令:什么命令可以把文件夹下所有的文件按修改时间先后排出来,包括子文件夹里的文件。
  • sharepoint 2010 使用STSNavigate函数实现文件下载举例
  • [提问]Linux下如何把多个.a文件编译一个.so文件,或者把多个.so文件编译成一个.so文件
  • python异常信息堆栈输出到日志文件
  • 请问:proc中的头文件中能包含头文件吗?(感觉如果头文件中包含头文件的话,在链接时就会有错误啊)
  • Centos6下安装Shell下文件上传下载rz,sz命令
  • 我要实现当进程打开文件时,根据文件名判断是否符合要求,符合后处理文件,再把文件返回给进程,怎么实现啊
  • 在MyEclipse中设开启xml文件自动提示和自动完成功能
  • vi 中编辑两个文件,怎样从其中一个文件拷一段内容到另一个文件中。(同时打开两个文件)
  • 修改配置真正解决php文件上传大小限制问题(nginx+php)
  • 怎么统计一个文件夹下有多少个文件(不包括文件夹)
  • 修改配置真正解决php文件上传大小限制问题(apache+php)
  • 请教高手一个简单问题:给定一个文件名,如何去查找该文件正在被几个程序使用,并怎么样才可以切断这个文件与正在打开该文件的程序之间的
  • MyEclipse如何查看和设置文件编码格式相关操作
  • linux 下的 .a 文件 .o 文件 是什么文件?各有什么作用?
  • 使用libpcap读取tcpdump抓取的文件并解析c代码实例
  • 如何用socket一次传输多个文件,如何确定文件一个文件结束
  • 设置sharepoint 2010文档库中的 pdf文件在浏览器中访问的打开方式
  • 如何删除某个目录下除了指定文件夹之外的所有文件和文件夹


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,