上述的四部分分别通过ap_scoreboard_image中相关的成员指针指向:global指针指向第一部分,parent指向第二部分,balancers指向第四部分。稍微复杂的这是的三部分线程信息的指定。共享内存中从more_storage指针往后sizeof(process_score)*server_limit的内存区域用于保存进程信息,因此将这块区域赋值给parent指针。
global_score和process_score它们在本质上都可以用一维线性结构进行保存,而worker_score则更类似于二维结构,一方便它要记录本身的信息,另一方面还必须知道它是哪一个进程产生的线程,因此它们的保存方法不太一样。在ap_scoreboard_image分配的内存中我们可以看到除了正常的sizeof(scoreboard)大小之外,还包括了server_limit * sizeof(worker_score *)大小的内存区域。该数组中的每一个元素都是一个指向worker_score结构的指针,指向thread_limit个元素的worker_score类型的数组。因此servers[i]对应的数组记录的则是进程i创建的所有thread_limit个线程的信息。按照这种规律,第i个进程内的第j个线程可以用server[i][j]进行描述。这个表达式在后面我们会多次使用到。
经过分配,整个记分板的内存布局可以用下图描述。
图4.1 记分板内存分配图
ap_assert(more_storage == (char*)shared_score scoreboard_size);
文章整理:西部数码--专业提供域名注册、虚拟主机服务
http://www.west263.com
以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!




