当前位置: 技术问答>linux和unix
满分跪求解决方法:有关linux多线程问题.....
来源: 互联网 发布时间:2016-06-06
本文导语: 我有一个文件oid,文件内容为每行存储一行数据。假设有2行数据,我想开两个线程来读这两行数据,第一个创建的线程读文件的话肯定读的是第一行数据,如果实现保证第二个创建的线程是读第二行数据呢...
我有一个文件oid,文件内容为每行存储一行数据。假设有2行数据,我想开两个线程来读这两行数据,第一个创建的线程读文件的话肯定读的是第一行数据,如果实现保证第二个创建的线程是读第二行数据呢?
我自己感觉由于只是对文件读,不用写,所以应该不用什么同步或者读写锁吧?
如果文件有N行数据,我想创建N个线程,每个线程读一行,这又如何实现呢?
跪求大牛解决办法!谢谢了!!!
我自己感觉由于只是对文件读,不用写,所以应该不用什么同步或者读写锁吧?
如果文件有N行数据,我想创建N个线程,每个线程读一行,这又如何实现呢?
跪求大牛解决办法!谢谢了!!!
|
通过SNMP来获得某设备的指定OID的数据值得程序,并不像你想象的那样子,每一个OID都要做一个线程来提取其数据值,一台设备启动一个线程就足够了。
对于一台设备提取多个OID,你可以对一个PDU绑定多个OID来一次get多个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