进程和线程之间的技术差异是什么?
我感觉像'过程'这样的词被过度使用,还有硬件和软件线程.如Erlang这样的语言轻量级进程怎么样?是否有明确的理由使用一个术语而不是另一个术语?
是的,我读过许多与操作系统相关的资料.我还在读书.但似乎所有这些都是以"抽象"的方式描述过程和线程,这使得他们的行为和逻辑组织得到了很多高层次的阐述.我想知道他们身体上是什么?在我看来,它们只是一些内存中的"数据结构",它们由内核代码维护和使用,以便于程序的执行.例如,操作系统使用一些过程数据结构(PCB)来描述为某个程序分配的过程的各个方面,例如其优先级,地址空间等.这样可以吗?
我知道有一个元数据存储辅助信息free(),realloc()当我们只提供指针时使用辅助信息.
我对堆很少有疑问.
1)我尝试搜索当我们在程序中使用线程但是找不到答案时如何分配内存.这里堆栈和堆的内容和位置是什么?是调用单个程序时堆栈和堆的工作方式.但是当涉及到线程编程时会发生什么?
2)使用OpenMP并行区域创建线程,并行代码将在每个线程中并发执行.这是否在内存中分配的空间比顺序执行的相同代码占用的内存多?
我有四个矩阵,我想用fork添加它们.我必须使用fork添加前两个矩阵,然后使用其他fork添加其他两个矩阵.然后我想添加上面两个矩阵的结果,以获得所需的输出.
我使用以下代码但没有在res矩阵中得到正确的答案,
#include<stdio.h>
#include<stdlib.h>
main()
{
int a[2][2] = {1,2,
4,5};
int b[2][2] = {1,2,
3,4};
int x[2][2] = {2,4,
3,6};
int y[2][2] = {4,6,
2,1};
int c[2][2];
int z[2][2];
int res[2][2];
int i,j;
int pid,pid2; //fork
pid = fork();
if(pid==-1)
{
printf("Can't fork\n");
}
if(pid==0)//child
{
for(i=0;i<2;i++)
{
for(j=0;j<2;j++)
{
c[i][j] = a[i][j]+b[i][j];
printf("cccc: %d\n", c[i][j]);
}
}
exit(EXIT_SUCCESS);
}
if(pid>0)//parent
{
wait(0);
}
pid2=fork();
if(pid2==-1)
{
printf("Can't fork\n");
}
if(pid2==0)//child
{
for(i=0;i<2;i++)
{
for(j=0;j<2;j++)
{
z[i][j] = x[i][j]+y[i][j]; …Run Code Online (Sandbox Code Playgroud)