分配新的 Thread 对象,以便将 target 作为其运行对象,将指定的 name 作为其名称,作为 group 所引用的线程组的一员,并具有指定的堆栈大小。
不是可以直接用线程属性进行设置吗?我写了一个小程序。如下:
#include <pthread.h>
#include <limits.h>#define Thread_NUM 5void *MultiThread_soap_serve(){sleep(5) printf("new pthread!!\n")}//PTHREAD_STACK_MIN 经过计算是16K。//64*16K = 1M,线程堆栈应该是够用的。#define MICHAEL_SET_PTHREAD_STACK_SIZE 64int main(){pthread_attr_t attr pthread_attr_init(&attr) size_t stacksize = MICHAEL_SET_PTHREAD_STACK_SIZE*PTHREAD_STACK_MIN //stacksize =PTHREAD_STACK_MIN //stackaddr=(void*)malloc((N+1)*PTHREAD_STACK_MIN) //pthread_attr_getstack(&attr,&statckattr,&stacksize) //pthread_attr_setstack(&attr,stackaddr,) pthread_attr_setstacksize(&attr,stacksize) int iThreadNum = 0 pthread_t PSoapThread[Thread_NUM] for ( iThreadNum <Thread_NUM iThreadNum++ ){pthread_create(&PSoapThread[iThreadNum],&attr,MultiThread_soap_serve,(void *)NULL) }pthread_attr_destroy(&attr) while(1){sleep(10) printf("main!!\n") }}
装入全指针指令LDS,LES,LFS,LGS,LSS这些指令有两个 *** 作数。第一个 *** 作数是一个有效地址,第二个是一个通用寄存器。指令从该地址
取得48位全指针,将选择符装入相应的段寄存器,而将32位偏移量装入指定的通用寄存器。注意在
内存中,指针的存放形式总是32位偏移量在前面,16位选择符在后面。LDS/LSS等装入指针以后,
就可以用DS:[ESI]/SS:[ESP]等这样的形式来访问指针指向的数据了。
比如这里:
lss init_stack,%esp
而:
init_stack:
.long init_stack 四字节地址
.word 0x10段选择符,同数据段选择符
这样执行后SS中装入段选择符0x10,ESP中装入init_stack的地址,栈顶在init_stack标号处。
*/
// 在新的位置重新设置IDT和GDT表。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)