在一个多线程的resmgr中,当使用如下代码创建thread pool时,调用thread_pool_destroy 销毁线程池时会阻塞住,thread_pool_destroy永不返回:
thread_pool_attr_t pool_attr = {0};
pool_attr.handle = dispatch_handle;
pool_attr.context_alloc= dispatch_context_alloc;
pool_attr.block_func = dispatch_block;
pool_attr.handler_func = dispatch_handler;
pool_attr.context_free = dispatch_context_free;
pool_attr.lo_water = 1;
pool_attr.hi_water = 4;
pool_attr.increment = 1;
pool_attr.maximum = 8;
if ((thread_pool = thread_pool_create(&pool_attr, 0)) == NULL) {
return errno;
}
当把上面的那几函数替换为对应的resmgr_xxx后,调用thread_pool_destroy一切正常,不知道这里是否在使用上有什么限制?
说明:可以确保在呼叫thread_pool_destroy时,没有任何正在进行的IO,事实上测试时只运行了这个server,client的代码还没写哪。
期待达人解惑!