免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1675 | 回复: 3
打印 上一主题 下一主题

2个问题熟悉线程和proc*c编程的朋友帮看看.. [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2003-06-23 11:12 |只看该作者 |倒序浏览
1.程序功能:
同时创建n 个线程连接n个数据库,这n个数据库的连接信息(如用户口令等等)在创建线程之前倒入到一个单向链表中.所以多个线程访问这个链表的节点的过程中需要同步,不过我访问的节点数据都是乱码,问题在那里呢?大家看看.....
2.另外:pro*c程序中是否需要#include <pthread.h>;的头文件,我没有包括都可以编译通过,但包含之后便宜却包错,不知道预编译的时候oracle是否已经包含了线成的头文件了呢?我的系统是aix4.3.4 ,ibm c编译器.
代码如下:
int main(int argc , char *argv[])
{       
        long iNodeCount = 0 , iRet = 0;
       
             iRet = pthread_mutex_init(&mutex_locklist , NULL);
             if (iRet != 0) {
                     perror("pthread_mutex_init error!\n";
                     exit(-1);
             }
             iNodeCount = LoadConnInfo();//将连接信息装入链表
             CreateThread(iNodeCount); //创建线成
        ClearList(ptrhead);//删除链表
            
        exit(0);
}

void CreateThread(long count)
{
        pthread_t thread;
        void *thread_result;
        struct ConnInfo *ptrthread = 0;
        long int i = 0 , iRet = 0;
       
        ptrthread = ptrhead;//全局变量,链表的头指针
             for (i = 0 ; i < count ; i++) {
                     /*printf("data=%s,log=%s\n" , ptrthread->;sDataFileName , ptrthread->;sLogFileName);                            */                   
                    if (pthread_create(&thread , NULL , ThrdCreateData , (void *)&ptrthread)) {
                        perror("create thread error!\n";
                        exit(-1);
                }
                iRet = pthread_join(thread , &thread_result);
                if (iRet != 0) {
                        perror("thread join failed!\n";
                        exit(-2);
                }
                ptrthread = ptrthread->;next;               
            }           
}

void *ThrdCreateData(void *arg)
{
         struct ConnInfo *node;
         
         EXEC SQL BEGIN DECLARE SECTION;
                 long i = 0;
         EXEC SQL END DECLARE SECTION;
         
         /*pthread_detach(pthread_seld());*/         
         pthread_mutex_lock(&mutex_locklist);
         node = (struct ConnInfo *)arg;
         printf("data=%s,log=%s\n" , node->;sDataFileName , node->;sLogFileName);//这里打印的数据都是错误的,但在进入线成函数之前的数据就都是正确的!
         pthread_mutex_unlock(&mutex_locklist);
         pthread_mutex_destroy(&mutex_locklist);          
         /*EXEC SQL CONNECT :node->;sConnStr;  
           if (sqlca.sqlcode != 0) {
                   printf("连接数据库失败,详细原因:%s , code = %d\n" , sqlca.sqlerrm.sqlerrmc , sqlca.sqlcode);
                   pthread_exit(NULL);                    
           }*/           
           
         /*EXEC SQL Select count(*) Into i From tab;*/       
}

论坛徽章:
0
2 [报告]
发表于 2003-06-23 14:02 |只看该作者

2个问题熟悉线程和proc*c编程的朋友帮看看..

up

论坛徽章:
0
3 [报告]
发表于 2003-06-24 01:25 |只看该作者

2个问题熟悉线程和proc*c编程的朋友帮看看..

1
PRO*C是不是支持多线程,如果不支持多线程那么就会有问题
2
要include 什么头文件是看看你的.c文件中有没有调用这个头文件内定义的函数
就是说include只影响编译时不影响连接时
如果不include也可以编译通过(注意也不要有某函数未定义的warnning,不然后面link时会err)那么就不用include了

论坛徽章:
0
4 [报告]
发表于 2004-02-06 19:00 |只看该作者

2个问题熟悉线程和proc*c编程的朋友帮看看..

关注
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP