开发平台(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的理由是? 我会觉得这样的设计很怪