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

使用pthread多线程文件IO的问题

    来源: 互联网  发布时间:2016-04-08

    本文导语:  问题是:开了两个线程,2号线程正常退出,1号线程和主线程都挂在join那里不动了,程序死在那里 我用GDB调试的时候,发现主线程和1号线程都在 _kernel_vsyscall()中就不动了 代码就是从一个文件中读入每一行,然后写...

问题是:开了两个线程,2号线程正常退出,1号线程和主线程都挂在join那里不动了,程序死在那里
我用GDB调试的时候,发现主线程和1号线程都在 _kernel_vsyscall()中就不动了

代码就是从一个文件中读入每一行,然后写入到另一个文件中
急,请高手指点!感激不尽

代码如下:
#include 
#include 
#include    

using namespace std; 

const int NUM_THREADS = 2;
const int MAX_CHAR_A_LINE = 1000;
FILE *inFile = NULL;
FILE *outFile = NULL;
pthread_mutex_t inMutex =  PTHREAD_MUTEX_INITIALIZER;
pthread_mutex_t outMutex = PTHREAD_MUTEX_INITIALIZER;
bool over = false;
;


void *fileIoThreads( void * args )
{
       int * num = (int *)((void **)args)[0];
       char*   str   =   (char *)((void**)args)[1];  
char line[MAX_CHAR_A_LINE] = {0};
      while(1)  
{
      pthread_mutex_lock( &inMutex );
if ( over || !fgets(line,MAX_CHAR_A_LINE,inFile)) {
break;
}
        pthread_mutex_unlock(&inMutex);
       pthread_mutex_lock( &outMutex );
   fprintf( outFile, "%st%dt%st", line, *num, str );
                        printf( "%dt%s", *num, line );
            pthread_mutex_unlock( &outMutex );


fflush( outFile );
over = true;


return 0;
     

}

int main()
{

int i, ret;
   inFile = fopen( "test3", "r");
   outFile = fopen( "out", "w");
   pthread_t a_thread[NUM_THREADS];
       
   char   buf[]   =   "func";  
   void*   arg[2];
   arg[1] = buf;  
   

   for( int i = 0; i 

    
 
 

您可能感兴趣的文章:

  • linux 下多线程 每个线程能否使用alarm来处理,信号是否会乱呢?
  • 困惑:子线程如何使用主线程的变量?
  • 如何实现这样的API,可同时被不同的进程/线程使用,但是又不区分进程/线程?
  • 请问在单进程,多线程程序里,线程间使用IPC的信号量来同步,能行吗?
  • java多线程编程之使用runnable接口创建线程
  • java线程之使用Runnable接口创建线程的方法
  • 使用信号量如何退出线程?
  • 多线程中动态链接库的使用
  • Java多线程之中断线程(Interrupt)的使用详解
  • 在多线程中使用select
  • 在unix下做webserver,使用多进程?多线程?
  • 如何锁定源代码,一次只能有一个线程使用?
  • 各位大侠,想问问驱动程序中(linux或者windows平台)可否使用线程?
  • 请教:多线程使用同一个socket进行数据收发会出现什么问题?
  • 请问如果要同时使用STL和多线程,会很麻烦么
  • 驱动多线程中频繁使用mdelay会对系统造成问题吗?
  • 有没有使用过Linux下线程池技术的高手,请为我指点迷津!!!
  • 请教一个pthread线程库的使用的问题
  • Shell有没有多线程,怎么使用?!
  • 请问可以在一个Servlet里使用多线程和SOCKET吗?
  • pthread_attr_init()及pthread_cond_wait使用疑惑
  • 无法使用pthread_creat()函数的问题
  • 关于sem_open 使用及-pthread
  • 有关使用pthread_creat时的参数传递问题!!!
  • 线程和fork,为什么要使用pthread_atfork?(一楼从来都有分)
  • 请问有没头函数<pthread.h>和<signal.h>里的函数的详细功能介绍?和使用方法???
  • 关于pthread_wait和互斥锁配合的使用问题
  • 使用pthread库失败
  • 重分请教: fedora core 5中如何使用 pthread_suspend_np?是否需要外部库支持?
  • 在linux7.3下多个线程使用 pthread_cond_t 的一个小问题。
  • c++程序中使用pthread编译不过,请教大家?????
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • sharepoint 2010 使用STSNavigate函数实现文件下载举例
  • 在ACC变成中要使用发ftp传送文件,但文件名不确定,请问怎么样在程序的FTP中使用字符串变量???
  • 使用libpcap读取tcpdump抓取的文件并解析c代码实例
  • qemu使用的img文件和vm使用的img文件格式不同吗?
  • linux/Centos/ubuntu下如何使用umask命令修改新建文件时的默认权限
  • 为什么使用cat输出的文本文件是中文的,使用java从文件读取出来时显示的是乱码?
  • 怎样使用FTP递归获取文件夹下的所有文件及子文件夹?
  • GUI问题:如何使用文件选择对话框保存文本文件,图像文件??
  • linux下用什么命令使用怎样使用*.bin文件?
  • 急问:在linux里面怎么察看一个文件夹或文件有哪些用户在使用?
  • *.taz文件是什么文件?如何使用?
  • 使用TCP传输文件,文件传输成功了,大小也一样,但无法打开
  • 有没有办法在打开一个文件之前判断当前是否有进程在使用(读或写)该文件
  • 急!!求教linux命令的使用:统计出/bin目录中文件的个数,追加到文件filea的结尾
  • 高手请进:linux下使用.o文件,makefile文件的问题
  • linux下静态库使用:"未使用链接器输入文件,因为链接尚未完成"
  • vim生成的.cpp~是什么文件?我使用vim编辑的时候出现了好多.cpp~文件
  • *.db文件使用什么数据库打开的文件呀?
  • windows下tinyxml.dll下载安装使用(c++解析XML库) iis7站长之家
  • 几台机器做lvs,使用100M 网线连接,文件系统使用NFS共享,读写速度会出现问题吗?
  • 请教高手一个简单问题:给定一个文件名,如何去查找该文件正在被几个程序使用,并怎么样才可以切断这个文件与正在打开该文件的程序之间的
  • C++ I/O 成员 tellg():使用输入流读取流指针
  • 在测试memset函数的执行效率时,分为使用Cash和不使用Cash辆种方式,该如何控制是否使用缓存?
  • C++ I/O 成员 tellp():使用输出流读取流指针
  • 求ibm6000的中文使用手册 !从来没用过服务器,现在急需使用它,不知如何使用! 急!!!!!
  • Python不使用print而直接输出二进制字符串
  • 请问:在使用oracle数据库作开发时,是使用pro*c作开发好些,还是使用库函数如oci等好一些啊?或者它们有什么区别或者优缺点啊?
  • Office 2010 Module模式下使用VBA Addressof
  • 急求结果!!假设一个有两个元素的信号量集S,表示了一个磁带驱动器系统,其中进程1使用磁带机A,进程2同时使用磁带机A和B,进程3使用磁带机B。
  • windows下tinyxml.dll下载安装使用(c++解析XML库)
  • c#中SAPI使用总结——SpVoice的使用方法


  • 站内导航:


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

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3