問題提出:
??????? 在并發(fā)訪問的時(shí)候,允許并發(fā)訪問函數(shù)A,但是當(dāng)訪問函數(shù)A時(shí)不允許訪問函數(shù)B,同樣訪問函數(shù)B時(shí)不能函數(shù)A,即兩個(gè)函數(shù)之間是互斥的.如何才能獲得訪問A時(shí)的最大性能呢?
解決方案(1):
???????假設(shè)多進(jìn)程環(huán)境下,一般選用PID作為可重入的重要條件,傳統(tǒng)實(shí)現(xiàn)如下:
?????? void lockpid(lock* p)
????? {
???????????? if(p->pid == getpid())
?????????????????? return;
???????????? else
??????????? {
??????????????????p->lock();
????????????}
????? }
??????本題解決也是借鑒如此,使用整數(shù) lockv = 0;作為兩函數(shù)互斥的根本,當(dāng)lockv>0時(shí)表示正在訪問函數(shù)A,<0時(shí)表示正在訪問函數(shù)B.具體實(shí)現(xiàn)如下:
??????函數(shù)A()
??????{
??????????? //臨界區(qū)
???????????{
??????????????????while(lockv < 0)
????????????????????????usleep(1);
??????????????????++lockv;
??????????? }
????????????
??????????? //do something ...
?????????? //臨界區(qū)
???????????{
??????????????????--lockv;
??????????? }???????
?????? }
???????
??????函數(shù)B()
??????{
??????????? //臨界區(qū)
???????????{
??????????????????while(lockv?> 0)
????????????????????????usleep(1);
??????????????????--lockv;
??????????? }
????????????
??????????? //do something ...
?????????? //臨界區(qū)
???????????{
??????????????????++lockv;
??????????? }???????
?????? }
??????缺點(diǎn)很明顯的,雖然在臨界區(qū)里面只有幾個(gè)機(jī)器指令,但并不能獲得最大的性能.如何優(yōu)化才能獲得函數(shù)A的最大性能呢?
posted on 2006-11-18 11:44
merlinfang 閱讀(340)
評(píng)論(0) 編輯 收藏 引用