#include #include #include #include #include using namespace std; using namespace hgl; void out_data_chain(DataChain *dc) { DataChain::ChainNode *start =dc->GetStartNode(); DataChain::ChainNode *end =dc->GetEndNode(); DataChain::ChainNode *node =start; cout<<"Data Chain: "; while(node) { cout<<"["<start<<","<count<<"]"; if(node==end) break; node=node->next; } cout< dis(1,BLOCK_SIZE); uniform_int_distribution dis_un_count(BLOCK_SIZE/10,BLOCK_SIZE/4); uniform_int_distribution dis_block_count(1,BLOCK_SIZE/10); List user_node_list; int free_count=dc.GetFreeCount(); do { int ubc=hgl_min(dis_block_count(gen),free_count); DataChain::UserNode *un=dc.Acquire(ubc); if(!un) //失败了 { cout<<"Acquire UserNode Error! FreeCount "<GetStart()<<","<GetCount()<<"] "; } out_data_chain(&dc); user_node_list.Add(un); }while(free_count>0); bernoulli_distribution dis_op(0.5); //使用伯努利分布随机数产生操作类型,50%的概率是Acquire,50%的概率是Release const int top_op_count=dis_un_count(gen); //最上层操作次数 int op_run_count=0; //执行成功的次数 do { bool op=dis_op(gen); //这次是acquire还是release int op_count=dis_un_count(gen); //操作数量 if(op) //acquire { op_count=hgl_min(op_count,dc.GetFreeCount()); if(op_count<=0) continue; DataChain::UserNode *un=dc.Acquire(op_count); if(un) { cout<<"Acquire ["<GetStart()<<","<GetCount()<<"] "; user_node_list.Add(un); } else { cout<<"Acquire "<GetStart()<<","<GetCount()<<"] "; user_node_list.Delete(pos); ++op_run_count; } else { cout<<"Release UserNode "<