[問題] pthread mutex問題請教

看板C_and_CPP作者 (linting)時間7年前 (2016/09/01 08:16), 7年前編輯推噓9(9020)
留言29則, 14人參與, 最新討論串1/1
開發平台(Platform): (Ex: VC++, GCC, Linux, ...) Android Linux 額外使用到的函數庫(Library Used): (Ex: OpenGL, ...) None 問題(Question): 我自己實作一個function去開底層的file node(/dev/XXX) 並將這個function包成native library透過JNI給app使用 在執行app的時候 app本身的程式也會去使用同一file node(另一個library) app也會呼叫我包好的native library 意思就是說file node會被開啟兩次 第一次是app其他process去呼叫的 另一次則是load native library去呼叫的 我有試著在open file node前加mutex做保護 但是不知道這樣是不是正確的 pthread_mutex_lock(&mutex); ret = open(/dev/XXX, O_RDWR); ... close(/dev/XXX); pthread_mutex_unlock(&mutex); 我發現這樣好像擋不了file node被重複開的現象 不知道我是否要在加其他的東西才能擋到呢? -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 59.127.173.192 ※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1472688981.A.626.html

09/01 08:30, , 1F
mutex是防止data race 你的情況應該是要別的
09/01 08:30, 1F

09/01 10:20, , 2F
close 前才 unlock 才能防止重複開啟吧?
09/01 10:20, 2F

09/01 10:20, , 3F
close 後
09/01 10:20, 3F

09/01 10:22, , 4F
fcntl
09/01 10:22, 4F

09/01 10:51, , 5F
同2F
09/01 10:51, 5F

09/01 14:04, , 6F
你應該要把app跟native lib的開檔都透過同一個路徑開啟
09/01 14:04, 6F

09/01 14:05, , 7F
而不是分別由app跟native兩方自己去開
09/01 14:05, 7F

09/01 18:09, , 8F
file lock
09/01 18:09, 8F

09/01 22:25, , 9F
lock(&mutex) open(f) ... close(f) unlock(&mutex)
09/01 22:25, 9F
Eleina Hazukashiine大 我原文表達的不好 我的作法就如同兩位的意見是一樣的 不過還是會發生重複開檔的情形 不知道是不是因為不同process而無法擋掉 metux是只能擋同一process不同thread的情形嗎? tjjh89017大 不太懂大大的意思 可在說明詳細嗎? HolyBug jaid大 file lock我還沒有用過 會在試試看 謝謝 ※ 編輯: chienchan (59.127.173.192), 09/01/2016 22:51:44

09/01 23:20, , 10F
mutex value 跟 address 印出來看看
09/01 23:20, 10F

09/02 00:40, , 11F
原來是不同process 那當然不行
09/02 00:40, 11F

09/02 00:52, , 12F
改用Named semaphores?
09/02 00:52, 12F

09/02 01:12, , 13F
就例如說都交給native lib來檔案操作,app本身透過
09/02 01:12, 13F

09/02 01:12, , 14F
native lib來修改檔案,而不是自己另外開檔案來讀寫
09/02 01:12, 14F

09/02 01:15, , 15F
是喔。mutex這些東西是拿來用在同一個process的
09/02 01:15, 15F

09/02 01:19, , 16F
我錯了,pthread有cross process的mutex
09/02 01:19, 16F

09/02 01:20, , 17F
我想file lock應該才是你要的東西
09/02 01:20, 17F

09/02 09:11, , 18F
mutex 只能在同一個 process 不同 thread 用
09/02 09:11, 18F

09/02 09:12, , 19F
semaphore 或 file lock 對你才有用
09/02 09:12, 19F

09/02 13:23, , 20F
std::mutex 是能跨std::thread的不是嗎? 但有些linux
09/02 13:23, 20F

09/02 13:23, , 21F
本身會直接用posix thread代替std, 有的framework甚
09/02 13:23, 21F

09/02 13:23, , 22F
至是使用boost::thread, 不同thread有最適合的mutex,
09/02 13:23, 22F

09/02 13:23, , 23F
從你寫的,我猜不是std的,你可能要找framework manua
09/02 13:23, 23F

09/02 13:23, , 24F
l來看
09/02 13:23, 24F

09/02 13:30, , 25F
Sorry, 我剛重看,process間是各自獨立的,mutex不可
09/02 13:30, 25F

09/02 13:30, , 26F
能有用,我剛以為你在解決multi-thread問題
09/02 13:30, 26F

09/02 18:32, , 27F
google flock
09/02 18:32, 27F

09/02 19:21, , 28F

09/03 23:05, , 29F
需要用到2個native lib的理由是? 我會覺得這樣的設計很怪
09/03 23:05, 29F
文章代碼(AID): #1NntDLOc (C_and_CPP)