|
发表于 2004-10-12 21:55:33
|
显示全部楼层
谢谢老马,纠正了一个错误认识
以前一直以为thread的栈是独立的,通过使用不同的页表来管理,仔细琢磨一下那是不可能的。
现贴段程序,在2.4内核下可以清楚的看到栈大小。
至于怎么改大小,由于栈的大小是不需要由编译程序指定,所以我认为是由内核或者pthread库管理的。
[code:1]
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <memory.h>
#include <unistd.h>
#include <pthread.h>
static void* threadproc(void*);
static char* tmp;
int main (int argc, char** argv)
{
int r;
pthread_t threadid1;
pthread_t threadid2;
int p;
p = 0;
r = pthread_create (&threadid1, NULL, threadproc, &p);
if (r != 0) {
printf ("pthread_create failed!\n");
return 1;
}
sleep (2);
p = 1;
r = pthread_create (&threadid2, NULL, threadproc, &p);
if (r != 0) {
printf ("pthread_create failed!\n");
return 1;
}
pthread_join (threadid1, NULL);
pthread_join (threadid2, NULL);
return 0;
}
void* threadproc (void* p)
{
char buf[256];
int pis = *((int*)p);
if (pis == 0) {
tmp = buf;
memset (tmp, 0, sizeof buf);
strcpy (tmp, "I am here !\n");
printf ("thread1: %p\n", tmp);
sleep (4);
}else {
printf ("%s", tmp);
printf ("thread2: %p\n", tmp);
tmp = buf;
printf ("thread2: %p\n", tmp);
}
sleep (3);
return NULL;
}
[/code:1] |
|