我有一個關於嵌入式系統中的C併發編程的問題,大約64Mb的RAM。 我特別希望減少由一個線程使用默認的內存,所以我定義:pthread_attr_setstacksize和pthread_exit
pthread_attr_t attr_test;
size_t stacksize = 0x186A0; // 100Kbyte
pthread_attr_init(&attr_test);
pthread_attr_setdetachstate(&attr_test, PTHREAD_CREATE_DETACHED);
pthread_attr_setstacksize(&attr_test, stacksize);
所以,當線程啓動時,它僅使用虛擬內存的100Kbyte。 但是當線程結束並調用pthread_exit時,進程使用的虛擬內存迅速增加!...
爲什麼?我能做什麼?
謝謝!
UPDATE:
主題 - >
void *thread_test(void *arg1) {
int *param;
param = (int*)arg1;
printf("Thread %d start\n", *param);
pthread_cond_wait(&condition[*param], &mutex[*param]);
printf("Thread %d stop\n",*param);
pthread_exit(0);
}
首頁 - >
int main(void) {
pthread_t IDthread[MAX_THREADS];
int param[MAX_THREADS];
int pointer;
int i, keyb;
void *stkaddr;
size_t stacksize;
puts("!!! THREAD TEST !!!");
printf("Process ID %d\n\n", getpid());
for(i=0; i<MAX_THREADS; i++)
{
pthread_cond_init(&condition[i], NULL);
pthread_mutex_init(&mutex[i], NULL);
IDthread[i] = 0;
param[i] = i;
}
stacksize = 0x186A0; // 100Kbyte
pthread_attr_init(&attr_test);
pthread_attr_setdetachstate(&attr_test, PTHREAD_CREATE_DETACHED);
/* setting the size of the stack also */
pthread_attr_setstacksize(&attr_test, stacksize);
pointer = 0;
do {
keyb = getchar();
if (keyb == '1')
{
if (pointer < MAX_THREADS)
{
pthread_create(&IDthread[pointer], &attr_test, thread_test, ¶m[pointer]);
sleep(1);
pointer++;
}
else
puts("MAX Threads Number");
}
if (keyb == '2')
{
if (pointer != 0)
{
pointer--;
pthread_cond_signal(&condition[pointer]);
sleep(1);
}
else
puts("0 Thread is running");
}
} while (keyb != '0');
printf("FINE\n");
return EXIT_SUCCESS;
}
當內存使用量增加時,使用調試器和中斷來查看實際發生的情況。 – timrau 2014-10-27 15:27:37
@timrau 問題是Thread只有這樣的代碼: ' printf(「Thread%d stop \ n」,* param); pthread_exit(0); ' 所以,沒有什麼可調試的...... – AndreaVan 2014-10-27 15:29:56
你能提供剩下的代碼嗎?在pthread_exit被調用後,你如何知道內存正在增加?它不能與主線程相關嗎? – fhsilva 2014-10-27 15:42:53