開發平台(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被重複開的現象
不知道我是否要在加其他的東西才能擋到呢?
作者:
bluesoul (å¿™æ»ä½ è€çˆ¸)
2016-09-01 08:30:00mutex是防止data race 你的情況應該是要別的
作者:
Eleina (艾琳娜)
2016-09-01 10:20:00close 前才 unlock 才能防止重複開啟吧?close 後
你應該要把app跟native lib的開檔都透過同一個路徑開啟而不是分別由app跟native兩方自己去開
作者: jaid (jaid) 2016-09-01 18:09:00
file lock
lock(&mutex) open(f) ... close(f) unlock(&mutex)
作者:
Eleina (艾琳娜)
2016-09-01 23:20:00mutex value 跟 address 印出來看看
就例如說都交給native lib來檔案操作,app本身透過native lib來修改檔案,而不是自己另外開檔案來讀寫
作者:
Caesar08 (Caesar)
2016-09-02 01:15:00是喔。mutex這些東西是拿來用在同一個process的我錯了,pthread有cross process的mutex我想file lock應該才是你要的東西
作者:
descent (「雄辯是銀,沉默是金」)
2016-09-02 09:11:00mutex 只能在同一個 process 不同 thread 用semaphore 或 file lock 對你才有用
std::mutex 是能跨std::thread的不是嗎? 但有些linux本身會直接用posix thread代替std, 有的framework甚至是使用boost::thread, 不同thread有最適合的mutex,從你寫的,我猜不是std的,你可能要找framework manual來看Sorry, 我剛重看,process間是各自獨立的,mutex不可能有用,我剛以為你在解決multi-thread問題
作者:
askacis (ASKA)
2016-09-02 18:32:00google flock
作者: alex70266 (小眼) 2016-09-02 19:21:00
作者: chiwa (我是青蛙,不是王子^_^) 2016-09-03 23:05:00
需要用到2個native lib的理由是? 我會覺得這樣的設計很怪