Linux下Fork与Exec使用 – Jessica程序猿

一、小引

  向那缺乏着UNIX/Linux监控零碎的人来说,,fork是最难懂的想法走过:它履行一次,但送还两个值。。fork行使职责是Unix零碎最能干的走完走过,它是七十年头UNIX前期的显影剂走过俗僧在大众化的观念和惯常地停止上的艰辛探究后腰槽的效果,一边,它使监控零碎在一道菜支撑上开支了最小的估价,在另一边,又为挨次员试图了诸一概如此类人精练的明了的多一道菜测度。与DOS和前期窗口明显的。,UNIX/Linux零碎是诸一概如此类人真正的多责任监控零碎。,不妨说,无多一道菜训练,不克不及算是真正的Linux训练外界。。

  多线索训练想法第一是在60年头增加的。,但直到80年头中期,多线索机制在UNIX零碎击中要害申请,眼前,因本身的很好的东西优点,多线索训练腰槽利益或财富了范围广泛的的申请。。

下面,我们的将引见汇编多处置和M的少量的初步知。。

二、多一道菜训练

是什么加工?加工的想法是为了零碎,而过错为了应用。,为用户,他边的想法是挨次。。当用户出口履行挨次的命令时,向零碎,它将开端诸一概如此类人加工。。但这与挨次明显的。,在这一道菜中,零碎能够理由重新开始诸一概如此类人或多个一道菜以使筋疲力尽多个。多一道菜训练的次要愿意的包孕加工把持和I,在懂这些事实屯积,我们的率先理由懂这加工的构图。。

  2.1 Linux下的一道菜构图

  Linux下诸一概如此类人一道菜有三个部件的记载在内存中。,它是装设遗传密码段。、堆栈段和记载段。说起来,沉思汇编言语汇编言语的人必需变卖这点。,概括地说,CPU有三种充满注册。,便于监控零碎的伪造。。这三个部件也诸一概如此类人完成的履行序列的理由部件。。

  ”装设遗传密码段”,望文生义,它是蓄电在挨次装设遗传密码击中要害记载。,是否机具中有数个一道菜运转同一的挨次,此后,他们可以应用能与之比拟的东西的装设遗传密码段。。堆栈段蓄电子挨次的送还地址。、挨次子挨次和分岔变量的限度局限因素。记载段蓄电挨次的全程变量。,常数然后静态记载分派的记载盖印(譬如用malloc与此同时而且的行使职责腰槽的盖印)。有很多不隐瞒的制约。,这否决票限于盖印。。是否零碎同时运转多个能与之比拟的东西挨次,它们当中不克不及应用能与之比拟的东西的堆栈段和记载段。。  

  2.2 Linux外界下的加工把持

在规矩UNIX外界下,准备和修正加工有两个毫伪造。:行使职责fork( 用于准备新一道菜。,该加工快要是流传的一道菜的完成复本。;行使职责族 它用于启动另诸一概如此类人一道菜来掉换流传的在运转的一道菜。。Linux的一道菜把持毫上与规矩UNIX P能与之比拟的东西,不隐瞒的制约上有少量的差数。,比如在Linux零碎中使调动vfork和fork完全能与之比拟的东西,在UNIX零碎的少量的版本中,,vfork使调动有明显的的效能。因这些差数快要不压紧我们的的大部件训练。,我们的无力的在嗨思索。。

  2.2.1 fork()

  fork在英文中是”支流”的意义。你为什么要取这名字?因一道菜在运转。,是否应用了fork,而且到侧面的诸一概如此类人加工。,因而这加工是支流的。,因而这名字很活泼。。下面就看一眼健康状况如何不隐瞒的应用fork,这段挨次演示了应用fork的毫表达:

 1void main()
 2{
 3int i;
 4if ( fork() == 0 ) 
 5    {
 6/* 子加工挨次 */7for ( i = 1; i <1000; i ++ ) 
 8          printf("This is child process\n");
 9    }
10else11    {
12/* 父一道菜挨次*/13for ( i = 1; i <1000; i ++ ) 
14       printf("This is process process\n");
15    }
16}

  运转挨次后,你可以注意庇护上更迭誊写版印刷品的千位数条音讯。。是否挨次仍在运转,您可以注意零碎击中要害两个在运转PS命令。。

  这么使调动这fork行使职责时发生了什么呢?fork行使职责启动诸一概如此类人新的一道菜,我们的先前说过。,这加工快要是流传的一道菜的复本。:能与之比拟的东西的装设遗传密码段用于子一道菜和父一道菜。;子一道菜付印父级的堆栈段和记载段。。很,父一道菜的持有记载都可以留给子一道菜。,先前,一旦子一道菜开端运转,然而它发扬了父一道菜的持有记载,先前记载竟先前被部分了。,他们当中不欺骗诸一概如此类相互作用。,即,它们当中不再共享记载。。当他们再次理由交互式的传达时,,孤独地经过一道菜间交际来如愿以偿,这将是我们的的下诸一概如此类人愿意的。。因他们是一概如此批准。,零碎健康状况如何分别它们?这是由送还值决议的。。父一道菜, fork行使职责送还了子挨次的一道菜号,子挨次,fork行使职责则送还零。在监控零碎中,我们的可以用PS行使职责注意明显的的一道菜号。,向父一道菜,它的一道菜号是由诸一概如此类人少于它的零碎使调动分派的。,向子加工,,它的一道菜号即是fork行使职责对父一道菜的送还值。训练中,父一道菜和子一道菜都要使调动行使职责fork()下面的装设遗传密码,而我们的执意使用fork()行使职责对爷儿俩一道菜的明显的送还值用if…else…申请有特殊教育需要来如愿以偿让爷儿俩一道菜使筋疲力尽明显的的效能,就像我们的下面提到的举例平等地。。我们的注意,当履行上述的示例时,从RA誊写版印刷品出两个传达。,这是爷儿俩一道菜孤独履行的出路。,然而我们的的装设遗传密码注意与串行装设遗传密码缺乏什么明显的。。

  准教授职位能够会问。,是否玩个痛快挨次在运转,它的记载段和堆栈是绝大的。,一次fork将付印一次,这么fork的零碎扣杀过错很大吗?竟UNIX自有其处理的测度,每个变卖,概括地说,CPU以翻页的表格分派内存盖印。,每个翻页都是现在的身体的内存的图像。,就像智能的CPU,通常是页码或张数。 4086八位字节大小人,记载段和堆栈段都是由多页使结合的。,fork行使职责付印这两个段,这公正的逻辑。,过错身体的学。,即,现在的履行fork时,身体的SP中两个加工的记载段和堆栈段,当一道菜作曲记载时,,此刻,两个一道菜当中的记载是明显的的。,该零碎将被分别。 翻页在身体的上是划分的。。零碎扣杀可以在盖印最小的。。

  嗨是诸一概如此类人小挨次来猎Linux。,它的源装设遗传密码绝复杂。:

1void main()
2{
3for( ; ; )
4   {
5     fork();
6   }
7}

  这挨次什么也不做。,执意死在周围地fork,出路是,这加工是开发区的。,这些加工持续发生新的加工。,很快,零碎的加工是丰富的的。,这零碎在发生。 这加工先前死了。。自然,提供零碎支撑员设置了最大接近的,此恶意挨次无法使筋疲力尽。。

2.2.2 exec( )行使职责族

如今让我们的看一眼诸一概如此类人一道菜是健康状况如何开端履行另诸一概如此类人挨次的。。到处Linux应用了Excel行使职责族。。零碎使调动ExcVE()来掉换流传的一道菜。,掉换是诸一概如此类人装设的加工。,它的限度局限因素包孕名声(名声)、限度局限因素列表(ARVV)和外界变量(Envp)。自然,有不已诸一概如此类人ExC家族。,但它们毫上是平等地的。,在 在Linux,它们分莫非:execl,execlp,execle,execv,execve和execvp,让我以Excel为例。,别的行使职责和Excel当中有什么分别?,请经过MAREXEC命令懂它们的制约。。

  使调动一道菜后,使调动Exc类行使职责。,它本身执意死的。,零碎将装设遗传密码段掉换为新挨次的装设遗传密码。,抛弃原始记载段和堆栈段,新的记载段和堆栈段被分派给新挨次。,剩的孤独地诸一概如此类人。,是一道菜号。,即,向零碎,然而同一的加工?,但这是另诸一概如此类人挨次。。先前类Excel行使职责击中要害少量的也容许外界等传达。。)

因而是否我的挨次想启动另诸一概如此类人挨次,但我依然几何平均持续,怎么办呢?那执意使结合fork与exec的应用。下面的装设遗传密码演示健康状况如何启动和运转别的挨次。:

1#include 
 2#include 
 3#include 
 4
 5char command[256];
 6void main()
 7{
 8int rtn; /*子一道菜送还值*/9while(1) {
10/* 从航空站读取要履行的命令 */11       printf( ">" );
12       fgets( command, 256, stdin );
13       命令(命令)1] = 0;
14if ( fork() == 0 ) {/* 子一道菜履行此命令。 */15          execlp( command, NULL );
16/* 是否履行行使职责送还,命令缺乏不变的履行挨次。,誊写版印刷品错误传达*/17          perror( command );
18          exit( errno );
19       }
20else {/* 父一道菜, 在其他人走后留下来子一道菜完毕,并誊写版印刷品子加工的送还值。 */21          wait ( &rtn );
22          printf( " child process return %d\n", rtn );
23       }
24   }
25}

  这挨次读取因为航空站的命令并履行它们。,履行使筋疲力尽后,父一道菜持续在其他人走后留下来从航空站读入命令。熟识DOS和WINDOWS零碎使调动的友人必然变卖DOS/WINDOWS也有exec类行使职责,它的适用是批准的。,但DOS和Windows也具有派生类效能。,因DOS是诸一概如此类人单一的责任零碎。,它仅仅在机具中承载父一道菜并履行子加工。,这执意类动机的效能。。Win32先前是诸一概如此类人多责任零碎。,先前保存类行使职责。,在Win32中如愿以偿动机行使职责的测度与上述的测度能与之比拟的东西。 UNIX击中要害测度快要是能与之比拟的东西的。,在子一道菜确立或使使安全继后,父一道菜持续,直到CH一道菜。。UNIX第一是诸一概如此类人多责任零碎。,因而,从中心的角度自己去看,不理由类动机效能。。

  在这一节里,我们的还想议论Stand()和Popen()行使职责。。system()行使职责先使调动fork(),此后使调动ExcE.()来履行用户的登录。 shell,它搜索可履行命令并辨析限度局限因素。,期末考试,它应用在其他人走后留下来()行使职责族来在其他人走后留下来CHIL的完毕。。行使职责Popen()和行使职责 零碎()批准性,明显的之处分娩它使调动管道()行使职责来准备管道。,使筋疲力尽了挨次的基准出口和基准出口。。这两个效能是为那不太勤勉的挨次员设计的。,在性能和使安全边在相当大的缺陷。,在能够的制约下,我们的葡萄汁想法戒除它。。

 2.3 Linux下一道菜间交际

  不隐瞒的的一道菜间交际是相对不能够的。,与此同时,作者很难有信心展出什么。,因而,在本条的出发,我们的率先引荐著名作家Ri。 史蒂文斯名著:《Advanced Programming in the UNIX Environment》,它的国文译本《UNIX外界资深的训练》已有机器制造业发行物发行,优良译文,译文同一道地,是否你真的对Linux下的训练感兴趣,,此后把书放在办公桌上或电脑侧面的。。说这些话很难衰落我的心。,现在来谈正经的,在这一节里,我们的将引见最毫和最复杂的知和想法。。

  率先,一道菜间交际无论如何可以经过让与开口式FI来如愿以偿。,明显的的一道菜经过诸一概如此类人或多个用锉锉交付传达。,说起来,在很好的东西申请零碎中,这种测度被应用。。但要而言之,,一道菜间交际(IPC):InterProcess 沟通)不包孕这种装作优良的沟通方法。在UNIX零碎中如愿以偿一道菜间交际的测度有很多种。,三灾八难的是,在持有UNIX零碎中搬迁的测度没有多少(孤独地半场DUPL),这也最原始的交流表格。。Linux是一种新的监控零碎。,在UNIX证实下快要持有一道菜间交际测度。:管道、音讯队列、共享内存、臂板喷射器系统、套接字摇曳等。。接下来我们的将逐个地引见它们。。

   管道

  传递途径是最古旧的一道菜间交际方法。,它包孕两种隐姓埋名管道和命名管道。,前者用于父一道菜和子一道菜当中的交际。,后者用于在TH上运转的诸一概如此类两个一道菜当中的交际。。

  隐姓埋名管道是经过管道()行使职责准备的。:

  #include 

  int pipe(int filedis[2]);

  限度局限因素FIDEDE送还两个用锉锉作为示范符:Fieldes(0)翻开以供读书。,Fieldes(1)翻开用于漂亮的书写。。Fieldes(1)的出口是Fieldes(0)的出口。。下面的示例演示健康状况如安在父一道菜当中停止交际。

1#define INPUT 0
 2#define OUTPUT 1
 34void main() {
 5int file_descriptors[2];
 6/*定养子一道菜号 */7    pid_t pid;
 8char buf[256];
 9int returned_count;
10/*准备隐姓埋名管道*/11    pipe(file_descriptors);
12/*准备子一道菜*/13if(PID) = fork()) == -1) {
14       printf("Error in fork\n");
15       exit(1);
16    }
17/*履行子加工*/18if(PID) == 0) {
19       printf("in the spawned (子女) process...\n");
20/*子一道菜将记载作曲父一道菜。,停业管道的读取端。*/21       停业(名声作为示范符[出口]
22       作曲(用锉锉)作为示范符[出口], "test data", strlen("test data"));
23       exit(0);
24    } else {
25/*履行父一道菜*/26       printf("in the spawning (父) process...\n");
27/*父一道菜从管道读取子一道菜作曲的记载。,停业管道的作曲端。*/28       停业(用锉锉)作为示范符[出口]
29       returned_count = 读取(名声作为示范符[出口], buf, sizeof(BUF)
30       printf("%d bytes of data received from spawned process: %s\n",
31       returned_count, BUF)
32    }
33 }

 Linux零碎下,命名管道可以经过两种方法准备。:命令行形式MKNOD零碎使调动和行使职责MKFIFO。下面两种测度在Curr下产生物理反应名为MyFIFO的命名管道:

  方法一:mkfifo(“myfifo”,RW

  方法二:mknod myfifo p

  产生物理反应命名管道后,可以应用普通用锉锉I/O行使职责,如OPEN。、close、read、写等伪造它。。嗨有诸一概如此类人复杂的举例。,前提我们的准备了名为MyFIFO的命名管道。。

1/* 加工1:读取命名管道*/2#include 
 3#include 
 4void main() {
 5    FILE * in_file;
 6int count = 1;
 7char buf[80];
 8    in_file = fopen("mypipe", "r");
 9if (in_file == 空) {
10        printf("Error in fdopen.\n");
11        exit(1);
12    }
13while (计数 = 弗雷德(BUF), 1, 80, in_file)) > 0)
14        printf("received from pipe: %s\n", BUF)
15    fclose(in_file);
16}
17/* 加工二:作曲命名管道*/18#include 
19#include 
20void main() {
21    FILE * out_file;
22int count = 1;
23char buf[80];
24    out_file = fopen("mypipe", "w");
25if (out_file == 空) {
26        printf("Error opening pipe.");
27        exit(1);
28    }
29    sprintf(buf,"this is test data for the named pipe example\n");
30    FBF(BUF), 1, 80, out_file);
31    fclose(out_file);
32}
33

  2.3.2 音讯队列

    音讯队列用于在同一的M上运转的一道菜间交际。,它绝相似的地管道。,说起来,这是一种在逐渐裁员的交际形式。,我们的可以用流量管或插座摇曳代表它。,因而,我们的将不再以这种方法解说。,准教授职位也被提议疏忽这种测度。。

   共享内存

  共享内存是山姆一道菜间快动作的的交际方法。,因记载不理由在明显的的一道菜间付印。共享内存区域通常由一道菜准备。,一道菜的其余者部件读取和作曲内存区域。。共享内存有两种测度。:映照/DEV/MEM方法和内存本能的用锉锉。前一种方法无力的给零碎使掉转船头额定的本钱。,但在现在的中否决票经用。,当它把持采访时,它将是身体的内存。,Linux零碎下,这仅仅经过限度局限对Linux零碎的内存采访来如愿以偿。,这自然不太功能的。。经用的测度是应用共享内存来蓄电SXMXXX行使职责族。。

  第诸一概如此类人应用的行使职责是SMGET。,它腰槽利益或财富诸一概如此类人共享蓄电识别。。

  #include

  #include

  #include

  int shmget(key_t key, int size, int 旗)

  这行使职责非常相似的地你熟识的Maloc行使职责。,零碎范围要价分派大小人大小人的内存作为共享M。。Linux零碎击中要害每个IPC构图都有诸一概如此类人非负积分的识别。,很,当音讯队列发送到音讯时,可以援用。。该识别是从IPC构图的保留字导出的。,这保留字,这是下面的第诸一概如此类人行使职责。 key。记载类型KEYTT在头用锉锉零碎中构成释义。,这是诸一概如此类人俗僧成形的记载。。在我们的当前的章节中,我们的还会尤指不期而遇这保留字。。

  当准备共享内存时,一道菜的其余者部件可以使调动SMAT()来连接到本身的地址。。

  void *shmat(int shmid, void *addr, int 旗)

  SMMGET行使职责送还的SMED共享内存识别,ADDR和FLAG的限度局限因素决议了地址O的决定测度。,行使职责的送还值是连接到记载S的现在的地址。,该加工可以读写加工。。

  如愿以偿与共享蓄电的一道菜间交际的转折点是使时间互相一致的。,我们的必需确保当一道菜读取记载时,,它几何平均的记载先前被写摆脱了。。通常,理由臂板喷射器系统来使时间互相一致对共享蓄电记载的采访。,到侧面的,可以经过应用shmctl行使职责设置共享蓄电内存的稍微标示位如SHM_LOCK、Smib解锁等如愿以偿。

   臂板喷射器系统

  领航灯也称为领航灯。,它用于完全的明显的一道菜当中的记载不赞成。,在共享M中最重要的申请是一道菜间交际。。本质上,臂板喷射器系统是诸一概如此类人反击。,它用于记载对资源的采访,比如共享内存。。普通说来,为了腰槽公用资源,一道菜理由履行以下伪造:

  (1) 校验把持资源的臂板喷射器系统。。

  (2) 是否臂板喷射器系统值为正,容许应用该资源。。这加工将增加入口处接近1。。

  (3) 是否臂板喷射器系统为0,眼前资源不合用的。,这加工进入宁静情况。,直到喷射器值大于0,这加工被激起性欲了。,转变到手段(1)。

  (4) 当一道菜不再应用臂板喷射器系统受控资源时,臂板喷射器系统加1。是否有一道菜警觉,在其他人走后留下来这臂板喷射器系统。,激起性欲一道菜。

  保持臂板喷射器系统情况是Linux内核监控零碎。我们的可以再度用锉锉/usr/src/linux/include /linux / 我们的注意了内核所应用的每个构图的构成释义来保持SEMA。。臂板喷射器系统是诸一概如此类人记载集。,用户可以独自应用此集中的每个元素。。使调动的第诸一概如此类人行使职责是SSEGET。,用于获取臂板喷射器系统ID。

  #include

  #include

  #include

  int semget(key_t key, int nsems, int 旗)

  保留字是后面提到的IPC构图的保留字。,它将决议在未来准备诸一概如此类人新的臂板喷射器系统集。,或援用存在的臂板喷射器系统集。。    NSEMS是SEM击中要害臂板喷射器系统。。是否准备新集中(通常在维修中),必需装设NSEMS。;是否是援用诸一概如此类人存在的臂板喷射器系统集中(普通在客户机中)则将nsems装设为0。

  SimCTL行使职责用于对臂板喷射器系统停止伪造。。

  int semctl(int semid, int semnum, int cmd, union semun 精氨酸)

  经过CMD限度局限因素如愿以偿明显的的伪造。,在头用锉锉中构成释义了7种明显的的伪造。,当训练时,你可以翻阅它。。

SIMOP行使职责在SEM上自发地履行伪造街区。。

  int semop(int semid, struct sembuf semoparray[], size_t NOPS)

  semoparray是诸一概如此类人有指导意义的事物,它指导诸一概如此类人臂板喷射器系统伪造街区。。NOP装设街区击中要害伪造数。。

  下面,让我们的自己去看诸一概如此类人不隐瞒的的举例。,它准备诸一概如此类人考虑到的IPC构图保留字和臂板喷射器系统。,设置这臂板喷射器系统的标定指数。,修正标定指数指导的臂板喷射器系统的值。,期末考试,我们的重排臂板喷射器系统。。在下面的装设遗传密码中,行使职责ftok只产生物理反应下面提到的IPC保留字。。

1#include 
 2#include 
 3#include 
 4#include 
 5void main() {
 6    key_t unique_key; /* 构成释义诸一概如此类人IPC保留字*/7int id;
 8struct sembuf lock_it;
 9    union semun options;
10int i;
1112    unique_key = ftok(".", ''a''); /* 产生物理反应转折点词,这特点是诸一概如此类人随机的种子。*/13/* 准备诸一概如此类人新的臂板喷射器系统集*/14    id = semget(unique_key, 1, IPC_CREAT | IPC_EXCL | 0666);
15    printf("semaphore id=%d\n", 身份证)
16    options.val = 1; /*设置变量值*/17    semctl(id, 0, SETVAL, 选择 /*设置标定指数0的臂板喷射器系统。*/1819/*誊写版印刷品臂板喷射器系统的值。*/20    i = semctl(id, 0, GETVAL, 0);
21    printf("value of semaphore at index 0 is %d\n", i);
2223/*为出一套新题下面的臂板喷射器系统*/24    lock_it.sem_num = 0; /*哪个臂板喷射器系统被设置?*/25    lock_it.sem_op = -1; /*构成释义运算*/26    lock_it.sem_flg = IPC_NOWAIT; /*伪造方法*/27if (semop(id, &lock_it, 1) == -1) {
28        printf("can not lock semaphore.\n");
29        exit(1);
30    }
3132    i = semctl(id, 0, GETVAL, 0);
33    printf("value of semaphore at index 0 is %d\n", i);
3435/*重排臂板喷射器系统*/36    semctl(id, 0, IPC_RMID, 0);
37}

   套摇曳

  套摇曳(socket)训练是如愿以偿Linux零碎和别的块监控零碎中一道菜间交际的次要方法走过。我们的变卖的WWW满足需要、FTP满足需要、Telnet满足需要都是由于套接字训练的。。不计数纸机处置明显的的评价,Socket摇曳也遵从的一道菜间的交际。。相互作用上的文学名著教科书也。 Richard 史蒂文斯创作的UNIX电网络训练:电网络化API和套接字,这本书的硬拷贝是清华大学发行物发行的。。它也Linux挨次员精华的的书走过。。

  顾虑这一部件的愿意的,你可以翻阅作者的另一篇文章,设计你本身的电由国人开发的下载工具软件。,引见了几种通俗的的摇曳行使职责及窥测。。这部件能够是Linux一道菜中最重要和最有引力的部件。,归根结蒂,Internet 我们的在以传说性质的加速开展。,是否挨次员在设计他的下诸一概如此类人挨次,,电网络毫缺乏思索上。,思索互联网网络,这么,不妨说,他的设计很难成。。

  3 Linux一道菜与Win32一道菜/线比力

  熟识Win32训练的人必需变卖。,Win32的一道菜支撑与Linux有很大的明显的。,在UNIX中,孤独地加工的想法,先前在Win32中,有诸一概如此类人线的想法。,这么Linux和Win32在嗨有什么分别呢?

  Win32击中要害一道菜/线是从OS / 2发扬的。。在Win32中,加工指的是诸一概如此类人加工。,线是一道菜击中要害线。。从中心角度,Win32的多一道菜和Linux当中缺乏太大的分别。,在Win32击中要害线才相当于Linux的一道菜,是现在的履行的装设遗传密码。。先前,在Win32中,记载线在同一的一道菜击中要害线当中共享。。这是Linux一道菜最大的分别。。

  下面的挨次显示Win32的下诸一概如此类人一道菜是健康状况如何启动线的。。

1int g;
 2 DWORD WINAPI ChildProcess( 拉普拉斯 lpParameter ){
 3int i;
 4for ( i = 1; i <1000; i ++) {
 5         g ++;
 6         printf( "This is Child Thread: %d\n", g );
 7     }
 8     ExitThread( 0 );
 9 };
1011void main()
12 {
13int threadID;
14int i;
15     g = 0;
16     CreateThread( NULL, 0, ChildProcess, NULL, 0, &threadID );
17for ( i = 1; i <1000; i ++) {
18         g ++;
19         printf( "This is Parent Thread: %d\n", g );
20     }
21 }

在Win32下,应用CuraType行使职责准备线,明显的于Linux下的准备加工。,Win32线缺乏从准备点运转。,它是由 CREATTION装设诸一概如此类人行使职责。,线从该行使职责开端运转。。这加工和先前的UNIX挨次是平等地的。,从两个线誊写版印刷品1000条音讯。。 StuaDID是子线的线号。,到侧面的,全程变量G是与父线共享的子线。,这是Linux最大的分别。。我们的可以注意,Win32的一道菜/线比Linux更复杂。,在Linux中如愿以偿相似的地Win32的线否决票难事。,提供fork当前,让子一道菜使调动thRealPoC行使职责。,而且为全程变量准备共享记载区域是可以的。,但在Win32下就无法如愿以偿相似的fork的效能了。因而如今Win32下的C言语汇编器所试图的库行使职责然而先前能亲和的块 LINUX/UNIX的库行使职责,但却仍无法如愿以偿fork。

多责任零碎,共享记载区域是理由的。,但这也诸一概如此类人轻易动机模糊不清的事物的成绩。,在Win32下,挨次员很轻易忘却线间的记载是共享的。,线修正变量。,另诸一概如此类人线修正了它。,出路是挨次呈现了成绩。。但在Linux下,因变量过错共享的,挨次员明白地装设要共享的记载。,使挨次更不寻常的、更使安全。。

顾虑Win32的加工想法,意义是申请。,这是与UNIX均势的Exchange。。

Linux也有它本身的多线索行使职责pType。,它明显的于Linux的一道菜。,它也明显的于Win32下的一道菜。,顾虑pthread的引见和健康状况如安在Linux外界下创作多线索挨次我们的将在另一篇文章《Linux下的多线索训练》中记述。

发表评论

Close Menu