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

  免費注冊 查看新帖 |

Chinaunix

  平臺 論壇 博客 文庫
最近訪問板塊 發(fā)新帖
查看: 1756 | 回復(fù): 5
打印 上一主題 下一主題

pppk之Recipe5.3(2) [復(fù)制鏈接]

論壇徽章:
0
跳轉(zhuǎn)到指定樓層
1 [收藏(0)] [報告]
發(fā)表于 2012-08-22 21:05 |只看該作者 |倒序瀏覽
這幾天做項目有些趕。項目里原先做開發(fā)的人因為受不了太辛苦,又轉(zhuǎn)去做support了,現(xiàn)在開發(fā)就我和另一個負責(zé)人了。而負責(zé)人的任務(wù)主要就是把活壓給我。我本來是負責(zé)2個項目的platform代碼和其中一個項目的實現(xiàn)的。現(xiàn)在雖然platform和自己的項目都完成了,另一個項目又到我手里了。唉,項目高層的負責(zé)人倒是輕松,說句你負責(zé)就行了。難道就不怕我走人了后,2個項目沒人能接手嗎?催吧。繼續(xù)催。我盡力而為,無欲則剛就好了。

我們下面接著寫昨天的Hash鎖。

論壇徽章:
0
2 [報告]
發(fā)表于 2012-08-22 21:18 |只看該作者
今天要講得是lock_value這個函數(shù)。它的功能是能鎖住某個Key對應(yīng)的值。但是其實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 );
復(fù)制代碼
這里我們試圖把在昨天已經(jīng)加入的"FOUR" => 4 , 修改其值為5。但由于我們剛剛已經(jīng)講"FOUR"對應(yīng)的值鎖住了,所以這里修改值的操作失敗了?磥礞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
復(fù)制代碼
怎么?還不能有效鎖住value嗎?的確。我們接下來的操作會讓顯示這句話的一些意思。

既然鎖住的是key對應(yīng)的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 );
復(fù)制代碼
從異常和輸出來看,即使value被鎖住,但是居然是可以刪除key的。而且這里我提前注釋了下,已有的鎖過期了,失效了。

論壇徽章:
0
3 [報告]
發(fā)表于 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");
復(fù)制代碼
這里我們先insert原先key為4的記錄并再次更改其值。都沒問題。鎖已經(jīng)沒有任何作用了。最后我們通過unlock_value來釋放value鎖,釋放的時候必須要指定key的值,不然報錯.

論壇徽章:
0
4 [報告]
發(fā)表于 2012-08-22 21:39 |只看該作者
最后還有個小細節(jié)。就是我們試圖鎖住hash里不存在對應(yīng)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");
復(fù)制代碼

論壇徽章:
0
5 [報告]
發(fā)表于 2012-08-22 21:43 |只看該作者
我剛還想到,鎖的嵌套問題。比如一種鎖加上去后,又加另一種鎖。這里就不實踐了。我想lock_hash的等級是最高的。

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

論壇徽章:
2
CU大牛徽章
日期:2013-04-17 11:46:28CU大;照
日期:2013-04-17 11:46:39
6 [報告]
發(fā)表于 2012-08-22 22:57 |只看該作者
呵呵,堅持每天報道
您需要登錄后才可以回帖 登錄 | 注冊

本版積分規(guī)則 發(fā)表回復(fù)

  

北京盛拓優(yōu)訊信息技術(shù)有限公司. 版權(quán)所有 京ICP備16024965號-6 北京市公安局海淀分局網(wǎng)監(jiān)中心備案編號:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年舉報專區(qū)
中國互聯(lián)網(wǎng)協(xié)會會員  聯(lián)系我們:huangweiwei@itpub.net
感謝所有關(guān)心和支持過ChinaUnix的朋友們 轉(zhuǎn)載本站內(nèi)容請注明原作者名及出處

清除 Cookies - ChinaUnix - Archiver - WAP - TOP