linux怎样在主线程上设置子线程的堆栈大小

linux怎样在主线程上设置子线程的堆栈大小,第1张

Thread(ThreadGroup group, Runnable target, String name, long stackSize)

分配新的 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表。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/bake/11195956.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-14
下一篇 2023-05-14

发表评论

登录后才能评论

评论列表(0条)

保存