- 论坛徽章:
- 0
|
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;*/
} |
|