多執行緒公用乙個物件時,也會出現和公用**類似的問題,這種問題就不應該使用lock關鍵字了,這裡需要用到system.threading中
的乙個類monitor,我們可以稱之為監視器,monitor提供了使執行緒共享資源的方案。
monitor類可以鎖定乙個物件,乙個執行緒只有得到這把鎖才可以對該物件進行操作。物件鎖機制保證了在可能引起混亂的情況下乙個時刻
只有乙個執行緒可以訪問這個物件。monitor必須和乙個具體的物件相關聯,但是由於它是乙個靜態的類,所以不能使用它來定義物件,而且它
的所有方法都是靜態的,不能使用物件來引用。下面**說明了使用monitor鎖定乙個物件的情形:
......
queue oqueue=new queue();
......
monitor.enter(oqueue);
......//現在oqueue物件只能被當前執行緒操縱了
monitor.exit(oqueue);//釋放鎖
如上所示,當乙個執行緒呼叫monitor.enter()方法鎖定乙個物件時,這個物件就歸它所有了,其它執行緒想要訪問這個物件,只有等待它使
用monitor.exit()方法釋放鎖。為了保證執行緒最終都能釋放鎖,你可以把monitor.exit()方法寫在try-catch-finally結構中的finally**塊
裡。對於任何乙個被monitor鎖定的物件,記憶體中都儲存著與它相關的一些資訊,其一是現在持有鎖的執行緒的引用,其二是乙個預備隊列,隊
列中儲存了已經準備好獲取鎖的執行緒,其三是乙個等待佇列,佇列中儲存著當前正在等待這個物件狀態改變的佇列的引用。當擁有物件鎖的
執行緒準備釋放鎖時,它使用monitor.pulse()方法通知等待佇列中的第乙個執行緒,於是該執行緒被轉移到預備隊列中,當物件鎖被釋放時,在預
備佇列中的執行緒可以立即獲得物件鎖。
解決多程序或多執行緒同時讀寫同乙個檔案的問題
解決多程序或多執行緒同時讀寫同乙個檔案的問題 php是沒有多執行緒概念的,儘管如此我們仍然可以用 不完美 的方法來模擬多執行緒。簡單的說,就是佇列處理。通過對檔案進行 加鎖和解鎖 來實現。當乙個檔案被乙個使用者操作時,該檔案是被鎖定的,其他使用者只能等待,確實不夠完美,但是也可以滿足一些要求不高的應...
多執行緒實現對同乙個或多個檔案的讀寫操作
程式用途 實現多個執行緒對同一檔案的讀寫操作 程式 test.c 該程式在ubuntu下測試通過 include include include include include include includeconst int buf size 1024 const int buf size2 10...
讀寫同乙個檔案出問題
在c primer plus 第六版中的第十三章程式設計練習第3題出現了問題。題目 編寫乙個檔案拷貝程式,提示使用者輸入文字檔案名,並以該檔名作為源檔名和輸出檔名。該程式要使用ctype.h中的toupper 函式,在寫入到輸出檔案時把所有文字轉換成大寫。使用標準的i o和文字模式。我一開始就只建立...