如題~
我有兩個行程A和B,各自都會產生一個while(1) thread,而thread都會open同一個
memory device且mmap到logical address來作讀寫,以下為我的程式碼的"示意"寫法:
int process_A()
{
pthread_create(thread_A);
pthread_join(); //wait thread_A terminate
}
void thraed_A()
{
int fd;
unsigned int *addr;
fd = open("/dev/mem_dev", O_RDWR);
addr = mmap(0, 0x1000000, PROT_WRITE, MAP_SHARED, fd, 0)
while(1)
{
if(Condition == TRUE)
{
read/write on addr;
}
}
}
int process_B()
{
pthread_create(thread_B);
pthread_join(); //wait thread_B terminate
}
void thraed_B()
{
int fd;
unsigned int *addr;
fd = open("/dev/mem_dev", O_RDWR);
addr = mmap(0, 0x1000000, PROT_WRITE, MAP_SHARED, fd, 0)
while(1)
{
if(Condition == TRUE)
{
read/write on addr;
}
}
}
兩個行程open同一個memory device且都mmap到logical address來作讀寫,會產生不可預知的問題嗎?
在我的測試中,其中一個process好像都會被莫名的kill掉,甚至還會出現page fault?
但若關掉其中一個,另一個都能*正常*執行!!!
請問各位大大,若兩個while(1)行程都到open同一個memory device且mmap到logical address作讀寫,
有地方需要注意的嘛?還是根本不行同時open同一個memory device且mmap到logical address作讀寫???
謝謝!!!