用最簡單的語言說就是這個物件有兩個狀態比如我們稱0和1,稱什麼一點也不重要,有訊號和無訊號就是相對的兩個狀態,沒什麼意義,你就認為一個狀態是0另一個狀態是1。
在程式裡如果加了WaitForSingleObject,那麼程式到這裡就去檢測你給他的那個控制代碼的狀態,如果是0程式就停在這裡了,如果是1,程式就繼續下去。
那麼執行緒同步就要利用這兩個狀態。假如你有兩個執行緒,都有可能訪問同一個檔案,而同一個檔案是不能被兩個執行緒同時寫入的,那麼你就需要在寫入之前先判斷檔案有沒有被另一個執行緒在寫入,如果有則等著,等另一個執行緒寫完之後你再繼續,我們不能用一個死循壞來嘗試開啟檔案知道成功為止,這樣會讓CPU有非常高的佔用率。
這裡你就要建立一個物件,這個物件有兩個狀態,我們約定,如果一個執行緒要寫入檔案之前就把這個物件狀態變成0,寫完之後把它變回1,那麼另一個執行緒在寫檔案之前只要檢測這個物件是不是為0就可以確定檔案有沒有被另一個執行緒在寫入了。檢測的過程就用WaitForSingleObject來操作,如果為1,WaitForSingleObject就和沒這句話一樣立刻執行下去了,如果那個物件是個0,那麼WaitForSingleObject就會停在這裡等,等到另一個執行緒寫完檔案,因為那個執行緒在寫完檔案之後會把物件變成1。
用最簡單的語言說就是這個物件有兩個狀態比如我們稱0和1,稱什麼一點也不重要,有訊號和無訊號就是相對的兩個狀態,沒什麼意義,你就認為一個狀態是0另一個狀態是1。
在程式裡如果加了WaitForSingleObject,那麼程式到這裡就去檢測你給他的那個控制代碼的狀態,如果是0程式就停在這裡了,如果是1,程式就繼續下去。
那麼執行緒同步就要利用這兩個狀態。假如你有兩個執行緒,都有可能訪問同一個檔案,而同一個檔案是不能被兩個執行緒同時寫入的,那麼你就需要在寫入之前先判斷檔案有沒有被另一個執行緒在寫入,如果有則等著,等另一個執行緒寫完之後你再繼續,我們不能用一個死循壞來嘗試開啟檔案知道成功為止,這樣會讓CPU有非常高的佔用率。
這裡你就要建立一個物件,這個物件有兩個狀態,我們約定,如果一個執行緒要寫入檔案之前就把這個物件狀態變成0,寫完之後把它變回1,那麼另一個執行緒在寫檔案之前只要檢測這個物件是不是為0就可以確定檔案有沒有被另一個執行緒在寫入了。檢測的過程就用WaitForSingleObject來操作,如果為1,WaitForSingleObject就和沒這句話一樣立刻執行下去了,如果那個物件是個0,那麼WaitForSingleObject就會停在這裡等,等到另一個執行緒寫完檔案,因為那個執行緒在寫完檔案之後會把物件變成1。