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