Fortran里如何实现多进程

Fortran里如何实现多进程,第1张

使用mpi

参考资料可以看下:高性能计算--MPI并行程序设计

环境配置

win: VS2010下配置MPI开发环境

linux编译安装或者使用包管理器均可,可以搜索教程或者看手册等内容

1怎样用多进程

Android多进程概念:一般情况下,一个应用程序就是一个进程,这个进程名称就是应用程序包名。我们知道进程是系统分配资源和调度的基本单位,所以每个进程都有自己独立的

资源和内存空间,别的进程是不能任意访问其他进程的内存和资源的。

如何让自己的应用拥有多个进程:

四大组件在AndroidManifest文件中注册的时候,有个属性android:process这里可以指定组件的所处的进程。

默认就是应用的主进程。指定为别的进程之后,系统在启动这个组件的时候,就先创建(如果还没创建的话)这个进程,然后再创建该组件。打印出它的进程名称:重

载Application类的onCreate方法即可。

设置android:process属性,要注意:如果是android:process=”:deamon”,以:开头的名字,表示这是一个应用程序的私有进程,否则它是一个全局进程。私有进程的进程名称是

会在冒号前自动加上包名,而全局进程则不会。一般我们都是有私有进程,很少使用全局进程。

具体步骤如下:

1、首先,开启我们的keil软件,具体的安装步骤就不做太多的介绍了;

开启后,点击菜单栏上的Project选项,创建我们的工程,如图所示;

2、点击后,d出图中的窗口,在箭头所指的文本框中输入你的芯片型号进行查找,如果没有需要自行将芯片添加到keil软件的库下,如图所示;

3、选中芯片点击Ok即可,在左侧的文本框中,选中图中选项右键选择Add New选项,如图所示;

4、选择c的文件,输入文件名以及文件的存储目录,如图所示;

5、点击OK后,在我们添加的文本框中输入我们的程序代码,如图所示;

6、编写好代码以后,选择菜单栏上的魔法棒选项,如图所示;

7、选择Output选项,将图中箭头所指的选项,选中,点击ok,如图所示;

8、然后点击编译选项,如图所示;

编译完成后,在我们的文件夹下找到hex的文件,将其烧写到我们的芯片中即可。

就算一段函数被加了同步锁 它也是可以被多个线程同时调用的 只是在多个线程之间会做一个CPU占用的协调 当一个线程调用完毕后 线程池中的其它线程才会通过这个函数

根据lock使用的对象不同 锁的作用域也不同 所以会出现LZ所说的 同时只能被一个线程调用

不知道LZ的目的和问题是什么 是在多线程调用时出错了 还是有特殊的需求 如果的确是要在不同的程序下调用dll 那不如每个程序都配置一份单独的dll来的更实在 因为考虑到dll之所以会只允许单线程调用 那么就意味着这个dll中有一些静态变量应用 同步调用时可能就会涉及到变量的使用冲突 所以建议先把那个dll搞明白 再想下一步该怎么去做

LZ没有提出是用什么语言编写程序 不同的语言在处理时也有各种区别

一个程序可以开启多个进程,但是让每个进程都要包含多个线程这个就有扯蛋了,你不能决定你要启动的程序里面是否有多线程的代码、要么这些程序都是你自己个写的,但是就算是你自个写的,也是在编译的时候决定了这个程序是否应用了多线程,而不是由启动程序去决定;

下面是利用多线程开启进程的代码,你参考下

            for (int i = 0; i < 5; i++)

            {

                //开启5条线程,每条线程开启一个进程

                new SystemThreadingThread(delegate()

                {

                    SystemDiagnosticsProcessStart("calcexe");

                })Start();

            }

第一个问题,不管是创建进程或者创建线程都不会阻塞,创建完毕马上返回不会等待子进程或者子线程的运行

第二个问题

首先进程和线程是不一样的

多进程时,父进程如果先结束,那么子进程会被init进程接收成为init进程的子进程,接下来子进程接着运行,直到结束,init进程负责取得这些子进程的结束状态并释放进程资源。而如果是子进程先结束,那么父进程应当用wait或者waitpid去获取子进程的结束状态并释放进程资源,否则子进程会成为僵死进程,它占用的进程资源不会释放

多线程时,如果父线程或者说你讲的main结束时使用return或者exit或者处理完毕结束,那么整个进程都结束,其他子线程自然结束。如果main结束时使用的是pthread_exit那么只有父线程结束,子线程还在运行。同样对于子线程结束时如果调用了exit,那么整个进程包括父线程结束,如果调用了pthread_exit或者正常结束,那么只有子线程结束。

另外子线程结束时如果没有分离属性,其他线程应当使用pthread_join去获取线程结束状态并释放线程资源,如同进程里的wait和waitpid

以上就是关于Fortran里如何实现多进程全部的内容,包括:Fortran里如何实现多进程、Android开发中怎样用多进程,用多进程的好、单片机应用程序的开发步骤等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

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

原文地址: https://outofmemory.cn/zz/9842623.html

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

发表评论

登录后才能评论

评论列表(0条)

保存