亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

Chinaunix

標題: pppk之Recipe5.3(2) [打印本頁]

作者: zhuyubei    時間: 2012-08-22 21:05
標題: pppk之Recipe5.3(2)
這幾天做項目有些趕。項目里原先做開發(fā)的人因為受不了太辛苦,又轉(zhuǎn)去做support了,現(xiàn)在開發(fā)就我和另一個負責人了。而負責人的任務主要就是把活壓給我。我本來是負責2個項目的platform代碼和其中一個項目的實現(xiàn)的。現(xiàn)在雖然platform和自己的項目都完成了,另一個項目又到我手里了。唉,項目高層的負責人倒是輕松,說句你負責就行了。難道就不怕我走人了后,2個項目沒人能接手嗎?催吧。繼續(xù)催。我盡力而為,無欲則剛就好了。

我們下面接著寫昨天的Hash鎖。
作者: zhuyubei    時間: 2012-08-22 21:18
今天要講得是lock_value這個函數(shù)。它的功能是能鎖住某個Key對應的值。但是其實Perl會告訴你這個鎖不安全。

lock_value的用法是lock_value( %has, key );
  1. lock_value( %hTestHash, "FOUR" );
  2. eval{# We can modify the value here
  3.         $hTestHash{ FOUR } = 5;
  4. };
  5. print "We can't modify the value of key 'FOUR', when it is locked:[$@]" if $@;
  6. printHash(  \%hTestHash );
復制代碼
這里我們試圖把在昨天已經(jīng)加入的"FOUR" => 4 , 修改其值為5。但由于我們剛剛已經(jīng)講"FOUR"對應的值鎖住了,所以這里修改值的操作失敗了?磥礞i管用。但這時候,Perl發(fā)出了個warning:
  1. Cannot usefully lock values in an unlocked hash at /develop/Project/Perl/pppk/Hashes/Recipe5.3/perl.pl line 95
復制代碼
怎么?還不能有效鎖住value嗎?的確。我們接下來的操作會讓顯示這句話的一些意思。

既然鎖住的是key對應的value,那我們把這個key刪掉會如何呢?鎖會阻止我刪除嗎?帶著這樣的疑問,我嘗試了下。
  1. eval{# the lock on "FOUR" is expired.
  2.         delete $hTestHash{ FOUR };
  3. };
  4. print "We can delete key 'FOUR' when it is locked." if not $@;
  5. printHash(  \%hTestHash );
復制代碼
從異常和輸出來看,即使value被鎖住,但是居然是可以刪除key的。而且這里我提前注釋了下,已有的鎖過期了,失效了。
作者: zhuyubei    時間: 2012-08-22 21:31
在刪除了鎖住的key/value后,我們重新加入剛剛的key,只是這里把值換成了5。我們想看看會發(fā)生什么樣的異常。但是居然一切平安無事!也就是說,這里的value鎖不起作用了。這印證了Perl的警告
  1. print "Lock expired!\n";
  2. eval{# Add 'FOUR' again
  3.         $hTestHash{ FOUR } = 5;
  4. };
  5. print "We can modify the value of key 'FOUR', when the lock is expired!" if not $@;
  6. printHash(  \%hTestHash );

  7. print "=====\n";
  8. eval{
  9.         $hTestHash{ FOUR } = 6;
  10. };
  11. print "We can modify the value of key 'FOUR' again, when the lock is expired!" if not $@;
  12. printHash(  \%hTestHash );
  13. unlock_value(%hTestHash,"FOUR");
復制代碼
這里我們先insert原先key為4的記錄并再次更改其值。都沒問題。鎖已經(jīng)沒有任何作用了。最后我們通過unlock_value來釋放value鎖,釋放的時候必須要指定key的值,不然報錯.

作者: zhuyubei    時間: 2012-08-22 21:39
最后還有個小細節(jié)。就是我們試圖鎖住hash里不存在對應key的value,比如這里沒有"TEN"。我們就鎖住它。
在我們試圖鎖住這個不存在的key的時候,Perl把這個key加進到了hash里去,其值是undef. 由于value被鎖住,在無法刪除該key的情況下,你是不能修改它的值的。這里要值得注意.
  1. # Lock the value where the key is not in the hash.
  2. # It inserts the key with a value undef.
  3. lock_value(%hTestHash,"TEN");
  4. print "Lock a non-exixted key\n";
  5. printHash(  \%hTestHash );
  6. eval{
  7.         $hTestHash{ TEN } = "10"
  8. };
  9. print "We can't insert the value of key 'TEN', when it is locked:[$@]" if $@;
  10. unlock_value(%hTestHash,"TEN");
復制代碼

作者: zhuyubei    時間: 2012-08-22 21:43
我剛還想到,鎖的嵌套問題。比如一種鎖加上去后,又加另一種鎖。這里就不實踐了。我想lock_hash的等級是最高的。

lock_keys和lock_value由于后者在刪除key的時候會失效,所以它應該比lock_keys的有效性稍微差些吧。大家有什么經(jīng)驗,歡迎分享!


作者: cdtits    時間: 2012-08-22 22:57
呵呵,堅持每天報道




歡迎光臨 Chinaunix (http://www.72891.cn/) Powered by Discuz! X3.2