|
藍森林 http://www.lslnet.com 2006年6月6日 10:18
2個問題熟悉線程和proc*c編程的朋友幫看看..
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;*/
} |
2個問題熟悉線程和proc*c編程的朋友幫看看..
up |
2個問題熟悉線程和proc*c編程的朋友幫看看..
1
PRO*C是不是支持多線程,如果不支持多線程那麼就會有問題
2
要include 什麼頭文件是看看你的.c文件中有沒有調用這個頭文件內定義的函數
就是說include只影響編譯時不影響連接時
如果不include也可以編譯通過(注意也不要有某函數未定義的warnning,不然後面link時會err)那麼就不用include了 |
2個問題熟悉線程和proc*c編程的朋友幫看看..
關注 |
| |