- 论坛徽章:
- 0
|
测试环境ubuntu 14.04, kernel 4.4.13, gcc 4.8.4, glib 2.40.2
测试结果:malloc/free函数不能在clone的线程中并行调用。总是死锁在malloc或是free函数上,或者直接报异常:corrupted double-list ......
请高人指点,如何解决该问题!!!
测试代码:
int thread_test( void *arg )
{
int n = 1000;
void *ptr = malloc( 1024 );
while( n-- );
free( ptr );
printf( "I'm exit normally\n" );
}
void main()
{
int tid;
void *stk_ptr;
int flags;
int stksz = 1024*1024;
stk_ptr = malloc( stksz );
// or mmap( NULL, stksz, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS|MAP_STACK, -1, 0 );
flags = CLONE_FILES | CLONE_FS | CLONE_PARENT | CLONE_PTRACE | CLONE_SIGHAND | CLONE_THREAD | CLONE_VM;
tid = clone( thread_test, stk_ptr+stksz-1024, flags, NULL, NULL, NULL, NULL );
tid = clone( thread_test, stk_ptr+stksz-1024, flags, NULL, NULL, NULL, NULL );
tid = clone( thread_test, stk_ptr+stksz-1024, flags, NULL, NULL, NULL, NULL );
tid = clone( thread_test, stk_ptr+stksz-1024, flags, NULL, NULL, NULL, NULL );
while( 1 ) sleep(1);
}
是否为clone函数中的flags参数影响了malloc/free???
|
|