[問題] 跨process的lock crash問題

看板C_and_CPP作者 (人生處處充滿驚奇)時間11年前 (2013/03/07 10:42), 編輯推噓2(2011)
留言13則, 6人參與, 最新討論串1/1
開發平台(Platform): (Ex: VC++, GCC, Linux, ...) Linux 問題(Question): while(1){ if(lock(x)==SUCCEE) break; count ++; if (count > 1000){ unlock(x); } } 現階段狀況為同時有兩支process A, B 都進入if(count > 1000) 的條件式裡面 A unlock 之後馬上就 lock 去做他的事情 但是 B 這時候才開始unlock 這樣 A 的 lock 就被 B 破壞了 抓很久才抓到這個問題... 雖然機率很低 但是有大大可以提供想法嗎?? 感激不盡 !! 餵入的資料(Input): x 為存放在 shared memory 裡面供 lock 使用的變數 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 118.163.101.55

03/07 11:52, , 1F
如果 lock 沒有成功為什麼可以/需要 unlock 呢?
03/07 11:52, 1F

03/07 12:49, , 2F
假設有某process lock之後crash了,其他process就必須做
03/07 12:49, 2F

03/07 12:50, , 3F
unlock的動作 @@
03/07 12:50, 3F

03/07 13:13, , 4F
用 OS 提供的機制,例如 mutex。
03/07 13:13, 4F

03/07 15:19, , 5F
OS 都會提供行程同步的 API 看看 pthread mutex 吧~
03/07 15:19, 5F

03/07 16:15, , 6F
一般OS提供的lock機制都是針對thread的,跨process的機制
03/07 16:15, 6F

03/07 16:17, , 7F
通常都是使用file lock來避免 process crash之後,會鎖住
03/07 16:17, 7F

03/07 16:18, , 8F
lock variable,但是這種效率非常低,所以我才會想用
03/07 16:18, 8F

03/07 16:18, , 9F
shared memory的方式來解看看這個問題...
03/07 16:18, 9F

03/07 17:26, , 10F
processes彼此地位是相同的 就不應該自己解lock
03/07 17:26, 10F

03/07 17:27, , 11F
不然就失去使用lock管理資源的意義了
03/07 17:27, 11F

03/07 17:39, , 12F
03/07 17:39, 12F

03/08 00:47, , 13F
try process share mutex
03/08 00:47, 13F
文章代碼(AID): #1HD_wTJ3 (C_and_CPP)