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

满分跪求解决方法:有关linux多线程问题.....

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

    本文导语:        我有一个文件oid,文件内容为每行存储一行数据。假设有2行数据,我想开两个线程来读这两行数据,第一个创建的线程读文件的话肯定读的是第一行数据,如果实现保证第二个创建的线程是读第二行数据呢...

      我有一个文件oid,文件内容为每行存储一行数据。假设有2行数据,我想开两个线程来读这两行数据,第一个创建的线程读文件的话肯定读的是第一行数据,如果实现保证第二个创建的线程是读第二行数据呢?
    我自己感觉由于只是对文件读,不用写,所以应该不用什么同步或者读写锁吧?
如果文件有N行数据,我想创建N个线程,每个线程读一行,这又如何实现呢?
跪求大牛解决办法!谢谢了!!!

|
通过SNMP来获得某设备的指定OID的数据值得程序,并不像你想象的那样子,每一个OID都要做一个线程来提取其数据值,一台设备启动一个线程就足够了。
对于一台设备提取多个OID,你可以对一个PDU绑定多个OID来一次get多个OID。

依据这个思路,你的多线程应该是这样的:
线程参数:
//C语言结构体
struct PParam
{
   char ipaddr[17];     //ip地址
   char community[128]; //团体名
   int  oids[32][32];   //oid数组
};
//C++类实现
class CPParam
{
   string ipaddr;
   string community;
   vector oids;
};
class COid
{
   vector oid;
};

void pthread_func(const PParam & p)//const CPParam & p
{
   session=connet(p.ipaddr,p.community);
   for(int i=0;i_fp;
sem_t *semLock = ((IDD_THREAD_PARAM *)args)->_semLock;
int nId = ((IDD_THREAD_PARAM *)args)->_nThreadId;

sem_wait(semLock);
while(!feof(fpRead))
{
memset(sLine,0,sizeof(sLine));
fgets(sLine,100,fpRead);
fprintf(stderr,"Thread ID-%d:%s",nId,sLine);
}
sem_post(semLock);
}

int main()
{
pthread_t *pThreads;
sem_t semLock;
pThreads = (pthread_t *)malloc(THREAD_NUM*sizeof(pthread_t));

sem_init(&semLock,0,1);
FILE *fp = fopen("test.txt","r");
//开始线程循环
IDD_THREAD_PARAM param;
for(int i=0;i

    
 
 
 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 一个朋友满分通过RHCE
  • 在线等待,linux,windows2000,安装问题!满分赠!
  • 怎么看自动生成的Makefile到底做了什么?紧急总动员,满分,在线等待
  • 满分求救
  • 满分求教大侠一个简单问题
  • 急急急急急急急啊,紧急求助啊!!!!!满分求助啊!!!!!!
  • 我的linux7.3为什么登录后进不了xwindow。(满分附送)
  • 同一块硬盘上装Win2000和Redhat9时遇到硬盘分区的问题,满分求解
  • 高手何在,请问如何箱qq一样在局域网内也可以建立udp的服务端进行listen而且网外的用户也可以访问到!满分送上!!!!
  • 双启动问题! 解决=满分! 谢谢!
  • 如何将程序变成服务?送满分。


  • 站内导航:


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

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

    浙ICP备11055608号-3