- 论坛徽章:
- 0
|
今天做了一个实验, 测试了所谓的malloc"不可重入"性:
- #include <stdio.h>
- #include <string.h>
- #include <stdlib.h>
- #include <signal.h>
- #include <time.h>
- #include <sys/time.h>
- int SetTimer()
- {
- struct itimerval interval;
-
- interval.it_interval.tv_sec = 0;
- interval.it_interval.tv_usec = 1;
- interval.it_value.tv_sec = 1;
- interval.it_value.tv_usec = 0;
- if (::setitimer(ITIMER_REAL, &interval, NULL))
- {
- return -1;
- }
- return 0;
- }
- void Handler(int nSigNo)
- {
- printf("ALARM signal!\n");
- char *p = (char*)malloc(rand() % 40960)
- free(p);
- }
- int main()
- {
- SetTimer();
- signal(SIGALRM, Handler);
- while (1)
- {
- char *p = (char*)malloc(rand() % 40960);
- free(p);
- }
- return 0;
- }
复制代码
定义一个每微秒触发的定时器, 触发时产生alarm信号, 在信号处理函数中调用malloc/free, 程序的主循环也调用malloc/free,马上程序就停住了,strace看了一下进程, 死锁了.
也就是说,所谓的"不可重入"指的就是不能在两个或以上的地方(在这个例子中是程序主循环和信号处理函数)同时调用的函数就是不可重入函数.
[ 本帖最后由 converse 于 2008-9-3 09:49 编辑 ] |
|