Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/magento/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Multithreading 多线程的执行_Multithreading_Pthreads_Execution - Fatal编程技术网

Multithreading 多线程的执行

Multithreading 多线程的执行,multithreading,pthreads,execution,Multithreading,Pthreads,Execution,当在进程执行期间调用fork()id时,将生成一个具有单独内存空间但内存内容相同的新进程。因此,由于这些是不同的进程,它们将具有不同的进程描述块,因此它们将根据调度算法给出的机会执行(PCB将保留其程序计数器值) 但当一个进程典当另一个线程时,该线程共享其地址空间。 我的问题是关于线程的执行:- 是给线程分配的具有不同程序计数器值的单独PCB,调度算法调度下一个将执行的线程如果是,那么在分配给它的函数完成执行之后,线程如何停止执行这是因为该函数是子线程堆栈上唯一的一个函数,当它返回时,没有其他函

当在进程执行期间调用fork()id时,将生成一个具有单独内存空间但内存内容相同的新进程。因此,由于这些是不同的进程,它们将具有不同的进程描述块,因此它们将根据调度算法给出的机会执行(PCB将保留其程序计数器值)

但当一个进程典当另一个线程时,该线程共享其地址空间。 我的问题是关于线程的执行:-
是给线程分配的具有不同程序计数器值的单独PCB,调度算法调度下一个将执行的线程如果是那么在分配给它的函数完成执行之后,线程如何停止执行这是因为该函数是子线程堆栈上唯一的一个函数,当它返回时,没有其他函数可以转到?

通常,调度程序/调度程序处理线程。线程是具有执行功能的系统对象,线程控制块(或在任何操作系统上调用的任何线程控制块)将具有自己的堆栈、寄存器保存(尤其是堆栈指针,即在中断时推送PC)、线程优先级、其他特定于线程的数据以及指向其所属进程的PCB指针。PCB具有内存管理数据、访问控制数据、权限等,即特定于进程的数据。进程没有任何执行,除非每个进程必须至少拥有一个线程(通常,但不是独占地,加载程序在创建进程时引发的线程)

如果线程代码通过从创建时使用的顶级函数返回而退出(决不是终止线程的最常见方式),它将弹出一个在创建时放在其堆栈上的返回地址,从而进行“TerminateThread”(或其他)系统调用,从而导致它自己自杀

显然,对“典型”操作系统的概述非常广泛。细节取决于操作系统(事实上,随着版本的不同而有所不同)