【发布时间】:2014-05-20 18:42:17
【问题描述】:
您好,我是这个论坛的新手, 我想问一下怎么做 以下代码中的共享内存使用 shmat(), shmget(), 到路径 mata , matb , matc 从父进程到子进程,因为我尝试使用全局 变量,但是当子进程终止时,它似乎 全局变量没有更新
请给我一个示例或示例代码...thnx inadvance
thnx
#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <unistd.h>
using namespace std;
class MATRIX{
public:
int row;
int col;
int** MAT;
MATRIX(int row , int col);
~MATRIX();
};
MATRIX::MATRIX(int row_i , int col_i){
row=row_i;
col=col_i;
MAT=new int* [row];
int i;
for(i=0;i<=row-1;i++){
MAT[i]=new int [col];
}
}
MATRIX::~MATRIX (){
int i;
for(i=0;i<=row-1;i++){
delete MAT[i];
}
delete MAT ;
}
void init_mat(MATRIX& mat){
int temp=1;
for(int i =0 ; i<= mat.row -1 ;i++){
for(int j=0;j<=mat.col-1;j++){
mat.MAT[i][j]=temp++; //Any initialization
}
}
}
void print_mat(MATRIX& mat){
for(int i =0 ; i<= mat.row -1 ;i++){
for(int j=0;j<=mat.col-1;j++){
cout<<mat.MAT[i][j]<<" ";
}
cout<<endl;
}
}
void mul_col(MATRIX& mata ,MATRIX& matb,MATRIX& matc, int col){
int sum;
for (int j =0 ;j<= mata.row-1;j++){
sum=0;
for(int i= 0 ;i<=mata.col-1;i++){
sum=sum+mata.MAT[j][i]*matb.MAT[i][col];
}
matc.MAT[j][col]=sum;
}
}
MATRIX mata(3,3);
MATRIX matb(3,3);
MATRIX matc(3,3);
int main()
{
init_mat(mata);
init_mat(matb);
//print_mat(mata);
//print_mat(matb);
pid_t pid;
for (int k=0; k <= (matb.col-1);k++){
pid = fork();
if(pid == 0){
cout<<"am in mul place"<<endl;
mul_col(mata,matb,matc,k);
print_mat(matc);
cout<<k<<endl;
exit(0);
}
else if(pid > 0){
wait(NULL);
cout<<"i passed by the wait "<<endl;
}
else{
cout<<"Can't fork"<<endl;
}
if (pid == 0)
{
break;
}
}
if(pid > 0){
cout<<"am in the print area"<<endl;
print_mat(matc);
}
}
【问题讨论】:
-
仅仅复制别人的代码对你没有多大帮助。你必须学习这些东西。你可以开始here。
-
如果有一些代码解释会很有帮助..但是谢谢你的帮助..我会阅读那个页面
-
阅读、吸收并尝试一下。人们愿意在此过程中帮助您解决特定问题,但 SO 不是教程服务。
-
我已经阅读了该页面并理解了其中的大部分内容,但是即使在搜索 google 后我也无法得到一些要点,1)我是否仍然需要将内存附加到创建共享内存的进程使用 shmget() 或 shmget 完成这两项工作,2)我找不到包含标志常量列表及其相应功能的文档,key 的解释(含义)是什么,4)key 之间有什么区别和内存 id ...thnx
标签: c++ posix ipc shared-memory