LINUX下系统编程,多进程间数据共享,即共享变量

LINUX下系统编程,多进程间数据共享,即共享变量,第1张

共享内存相关的API怎么使用不难:

1. 首先调用shmget分配一个新的共享内存,这里你可以指定其大小,如果你要分配一个整形,那你可以将size参数设置成4,如果你要共享一个结构体那就将size参数设置成你的结构体大小, *** 作系统不关心你要共享什么,它只关心你要分配多少个字节的区间。而且实际上 *** 作系统会将你要求的大小按照内存页面的大小进行对齐,也就是说它可能实际上给你分配若干个页面的物理存储空间,只要这个空间能够容纳你所指定的大小就ok了。它的第三个参数是关于一些访问权限设置的,要讲起来太长,建议自己搜索一下,或者用man查查帮助。总之,调用完shmget以后系统会给你创建一段共享内存,然后返回给你一个shmid,也就是这个共享内存的标识,你可以理解为给它取了个名字。

2. 接着调用shmat将这段共享内存映射到你的进程的虚拟地址空间上。这个函数的第一个参数就是你之前调用shmget创建的共享内存的名字shmid;第二个参数是个指针,指向你的进程虚存空间中的某个地址,你可以通过传入一个确定的地址强行要求 *** 作系统将共享内存映射到你指定的虚存地址上(可能会失败,如果你指定的虚拟地址空间已经映射了别的物理存储空间),也可以通过传入0地址让系统给你选择一个合适的地址(它会通过返回值把地址返回给你)。第三个参数则允许你指定一些特殊的标志位,还是那句话,太复杂自己搜索一下看看,一般应用不需要用到。

至于例子嘛你可以看看下面这个链接:

http://baike.baidu.com/view/3025906.htm

另外,你要知道只用共享内存是不互斥的,你必须结合信号量一起使用才能防止互斥问题的出现。如果你共享的只是一个整形变量可能问题不大,因为对页面对齐的整形变量的读写都是原子 *** 作,但如果你共享的是个复杂的结构体就得小心了。

1.安卓线程间通信的方式有以下几种

1)共享变量(内存)

2)管道

3)handle机制  

runOnUiThread(Runnable)

view.post(Runnable)

android 进程内的消息驱动机制---Handler,MessageQueue,Runnable,Looper

Looper和Message的处理机制:首先在主线程中创建了一个handler对象,目的是为了处理从子线程发送过来的消息,然后当子线程有发送消息的需求时会使用Message对象,消息首先会被存储在Message queue消息队列中,主线程还有一个Looper消息轮询器,会循环遍历消息队列中的消息,当发现消息的时候会发送消息给handler处理(更新ui等 *** 作),handler调用handleMessage处理完后将Message置为null以便回收.

2进程间的通信

进程间的通信:

bind机制(IPC->AIDL)

linux级共享内存

boradcast

Activity之间可以通过intent来传递数据

3.安卓结束进程几种方式

1)使用ActivityManager中的restartPackage(String packname)方法,这里清单文件里面要配置权限

2)android.os.process.killProcess(int pid)只能终止本程序的进程

3)System.exit()

4)在android2.2版本之后则不能再使用restartPackage()方法,而应该使用killBackgroundProcesses()方法,同时应该配置权限

5)利用反射调用forceStopPackage来结束 Method forceStopPackage = am.getClass().getDeclaredMethod("forceStopPackage", String.class) forceStopPackage.setAccessible(true) forceStopPackage.invoke(am, yourpkgname) 配置文件中需要添加定义:android:sharedUserId="android.uid.system"  另外需要再在配置文件添加权限:<uses-permission android:name="android.permission.FORCE_STOP_PACKAGES"></uses-permission> 

6)使用Linux指令kill -9


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/8688805.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-19
下一篇 2023-04-19

发表评论

登录后才能评论

评论列表(0条)

保存