999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

對Linux平臺OCI接口斷網(wǎng)阻塞問題的處理

2019-01-30 08:05:32顧鵬程
電子技術(shù)與軟件工程 2019年2期
關(guān)鍵詞:數(shù)據(jù)庫信號方法

文/顧鵬程

1 引言

OCI是Oracle公司提供的Oracle數(shù)據(jù)庫的C接口。一些監(jiān)控系統(tǒng),如軌道交通監(jiān)控系統(tǒng)、電力調(diào)度系統(tǒng)等,需要在Linux平臺對OCI進(jìn)行封裝。這類系統(tǒng)實(shí)時性要求較高,而OCI接口在Linux平臺存在斷網(wǎng)阻塞問題,這大大影響了系統(tǒng)實(shí)時性。本文提出一種對已封裝Linux平臺OCI接口的改進(jìn)方法,可在接口斷網(wǎng)阻塞時快速切換至備網(wǎng)。

2 OCI網(wǎng)絡(luò)阻塞問題描述

長期不間斷運(yùn)行的系統(tǒng)不可避免會出現(xiàn)數(shù)據(jù)庫服務(wù)器網(wǎng)線插拔或松動等問題,如果故障未及時恢復(fù),OCI函數(shù)將長時間阻塞,例如在Ubuntu系統(tǒng)可能長達(dá)二十多分鐘,這在大多數(shù)情況下是不允許的。監(jiān)控系統(tǒng)一般配備主備網(wǎng)絡(luò),因此開發(fā)者往往希望當(dāng)發(fā)生阻塞時,數(shù)據(jù)庫接口能夠自動切換網(wǎng)絡(luò)。

3 阻塞問題處理

3.1 理論分析

在Linux系統(tǒng)中對于阻塞的解決通常使用sigalarm信號,指定信號觸發(fā)時間,在可能的阻塞模塊前調(diào)用alarm函數(shù)。經(jīng)過實(shí)驗(yàn),該方法只是對現(xiàn)有進(jìn)程的打斷,無法對接口函數(shù)給出錯誤返回值,且需退出進(jìn)程,無法保證事務(wù)連貫。

還有采用線程和條件變量相結(jié)合的處理方法,將接口函數(shù)置于線程中執(zhí)行,用條件變量計時等待接口函數(shù)返回。該方法不必退出程序,但未考慮主備網(wǎng)絡(luò)切換,且條件變量方法存在弊端,即當(dāng)信號先于等待發(fā)出時,信號將不再起作用,導(dǎo)致等待無法返回。

圖1:任務(wù)流程

本文以上方法進(jìn)行總結(jié),提出一種結(jié)合泛型、線程、信號量方法的阻塞式任務(wù)線程方法,避免了上述方法的弊端,能夠在接口阻塞時自動切換網(wǎng)絡(luò)。

3.2 處理流程

首先在創(chuàng)建數(shù)據(jù)庫連接時,創(chuàng)建一個任務(wù)線程,負(fù)責(zé)執(zhí)行接口函數(shù)。接口函數(shù)通過泛型進(jìn)入線程。當(dāng)線程被獲得任務(wù)時,觸發(fā)“任務(wù)”信號以執(zhí)行任務(wù)。當(dāng)任務(wù)結(jié)束時,觸發(fā)“返回”信號,主線程返回結(jié)果。調(diào)用接口函數(shù)的模塊在獲得“返回”信號前將一直阻塞并計時,當(dāng)任務(wù)超時,采取tnsping的方式對網(wǎng)絡(luò)狀況進(jìn)行判斷,若網(wǎng)絡(luò)未斷將繼續(xù)等待;若網(wǎng)絡(luò)斷開,將創(chuàng)建備用線程和備用網(wǎng)絡(luò)數(shù)據(jù)庫連接,而后執(zhí)行阻塞任務(wù),并退出原線程。具體流程如圖1所示。

3.3 關(guān)鍵代碼實(shí)現(xiàn)

本文采用VC10實(shí)現(xiàn)。泛型部分參考了任務(wù)隊(duì)列的方法,增加了支持不同返回類型的修改。首先定義模版類class Base,結(jié)構(gòu)體struct task_unit由class Base指針對象構(gòu)造,表示任意函數(shù)任務(wù)。任務(wù)的產(chǎn)生由templatestatic task_unit gen(FUNCT func_, ARG1 arg1_...)實(shí)現(xiàn)。如果涉及引用類型參數(shù),需要在函數(shù)中加入相應(yīng)的引用符號。

阻塞任務(wù)隊(duì)列部分采用ACE庫實(shí)現(xiàn),也可以選擇Linux的C++標(biāo)準(zhǔn)庫實(shí)現(xiàn)。線程類繼承ACE_Task_Base,信號量采用ACE_Semaphore,“任務(wù)”信號初始化為 t_sem(0),“返回”信號初始化為r_sem(0)。線程通過調(diào)用t_sem.acquire()等待任務(wù)注入。主線程將任務(wù)注入任務(wù)線程后,調(diào)用t_sem.release()觸發(fā)任務(wù)執(zhí)行,調(diào)用r_sem.acquire(&timeout)等待任務(wù)完成,其中timeout為超時設(shè)置。任務(wù)結(jié)束時,線程調(diào)用ret_sem.release(),使主線程獲得返回值。

4 結(jié)論

本文方法對Linux平臺OCI接口的網(wǎng)絡(luò)阻塞問題進(jìn)行處理,針對已封裝的接口函數(shù),只需利用泛型、多線程、信號量,即可構(gòu)造一個通用的阻塞模式任務(wù)隊(duì)列,將接口函數(shù)置于阻塞任務(wù)隊(duì)列下,在網(wǎng)絡(luò)阻塞時,通關(guān)新的線程調(diào)用備用網(wǎng)絡(luò),解決了原本OCI接口函數(shù)長時間阻塞的問題。經(jīng)過實(shí)驗(yàn),該方法對舊有接口的改造工作量小,并且能實(shí)現(xiàn)應(yīng)用的數(shù)據(jù)庫連接在網(wǎng)絡(luò)發(fā)生通斷問題時進(jìn)行自動切換。

猜你喜歡
數(shù)據(jù)庫信號方法
信號
鴨綠江(2021年35期)2021-04-19 12:24:18
完形填空二則
基于FPGA的多功能信號發(fā)生器的設(shè)計
電子制作(2018年11期)2018-08-04 03:25:42
數(shù)據(jù)庫
財經(jīng)(2017年2期)2017-03-10 14:35:35
數(shù)據(jù)庫
財經(jīng)(2016年15期)2016-06-03 07:38:02
用對方法才能瘦
Coco薇(2016年2期)2016-03-22 02:42:52
數(shù)據(jù)庫
財經(jīng)(2016年3期)2016-03-07 07:44:46
基于LabVIEW的力加載信號采集與PID控制
數(shù)據(jù)庫
財經(jīng)(2016年6期)2016-02-24 07:41:51
四大方法 教你不再“坐以待病”!
Coco薇(2015年1期)2015-08-13 02:47:34
主站蜘蛛池模板: a级毛片毛片免费观看久潮| 欧美精品另类| 蝌蚪国产精品视频第一页| 久久亚洲综合伊人| 国产福利免费视频| 国产欧美日韩精品综合在线| 九九视频在线免费观看| 亚洲天堂网视频| 久久国产精品国产自线拍| 国产一二三区视频| 久久中文字幕2021精品| 人妻一本久道久久综合久久鬼色| 99热这里只有精品久久免费| 国产色婷婷视频在线观看| 亚洲高清中文字幕| 在线观看无码av五月花| 白浆免费视频国产精品视频| 日本黄网在线观看| 秋霞午夜国产精品成人片| 久久九九热视频| 免费高清毛片| 国产精品午夜福利麻豆| 老司机午夜精品网站在线观看| 久久大香伊蕉在人线观看热2| 97国产一区二区精品久久呦| 国产91小视频| 日韩小视频网站hq| 97在线视频免费观看| 亚洲男女在线| 国产永久无码观看在线| 亚洲国产欧美目韩成人综合| 又猛又黄又爽无遮挡的视频网站 | 青青操国产视频| 在线观看国产黄色| 欧美色视频网站| 久热中文字幕在线| 亚洲第一黄色网| 久久久久青草大香线综合精品| 伊人久久精品无码麻豆精品| 久久久久亚洲av成人网人人软件| 午夜啪啪网| 亚洲日韩精品无码专区97| 国产日本一线在线观看免费| 99热这里只有成人精品国产| 亚洲AV无码乱码在线观看代蜜桃| 国产在线欧美| 国产va免费精品观看| 日韩欧美中文字幕在线精品| 五月婷婷导航| 亚洲一区二区日韩欧美gif| 5555国产在线观看| 色视频国产| 国产福利不卡视频| 99re在线免费视频| 亚洲一区二区三区香蕉| 在线欧美日韩| 国产精品页| 亚洲日韩第九十九页| 国产青青操| 国产精品黑色丝袜的老师| 亚洲系列中文字幕一区二区| 日本亚洲欧美在线| 风韵丰满熟妇啪啪区老熟熟女| 亚洲成在线观看| 国产乱肥老妇精品视频| 99视频全部免费| 欧美在线导航| 国产精品成人第一区| 欧美中出一区二区| 国产精品分类视频分类一区| 国产成人a毛片在线| 欧美日本中文| 92午夜福利影院一区二区三区| 免费毛片视频| 波多野结衣一区二区三区四区 | 国产成年女人特黄特色毛片免| 视频一区亚洲| 精品无码人妻一区二区| 免费高清自慰一区二区三区| 亚洲av无码片一区二区三区| 午夜精品一区二区蜜桃| 香蕉视频在线精品|