我有一个资源池(其实就是内存块啦),每块内存都有一个可用标志(比如小于2就可以使用,大于2表示已占用),在我的程序里对于同一块内存有2个以上的线程在操作(操作不同地方,所以没有问题),现在的问题是,这些线程最后一个完成处理的,必须保证把这块内存再归还到资源池中去,这些线程的结束顺序不定,这次A线程先结束,下次可能是B线程先结束,兄弟迂钝,想破脑子还想不通怎么实现资源的无冲突释放,也就是说最好是后结束的线程来释放(咦,它怎么知道它是最后一个呢),请哪位高人来指点一下,假设这块内存是一个大结构体,可以放一些标志字段。

解决方案 »

  1.   

    简单,不用管谁先结束的,用的时候,向池申请,找到引用计数为0的块给他就可以了,如果线程申请某一已经分配的块,就将哪个块的引用计数加1,线程释放块的时候把块的引用计数递减1就行了,当计数为0时,块就是空闲的,下次就可以参加分配了,只是加减的时候要锁定总线,用interlockedXXX系列的api就行了
      

  2.   

    想破脑子还想不通怎么实现资源的无冲突释放,也就是说最好是后结束的线程来释放(咦,它怎么知道它是最后一个呢),// 照你的描述 只要所有线程都结束了再释放就是 中间不释放 只是把相应的状态改变而已
    内存池 的作用就是这样到你都不用的时候 再整个释放掉可以考虑用计数器 -- 这个计数器对所有线程对任意一块的使用标识 用了就+1 用楼上说的Inter...
    不用了就-1 当然了 还要设置你里面说的那个标志位。。你可以定时 去查看这个计数器的值 为0 就。
      

  3.   

    to 楼上:
       我的线程也是从线程池里临时唤醒的,也就是说内存块和线程之间其实没有关系,更重要的是,我的这些线程都不能阻塞太长时间,因为它们都是为异步操作服务的,需要尽快响应,所以不能等事件或者semaphore等东东,用interlockedXXX会不会堵住呢
      

  4.   

    呵呵,两边都关注,谢谢beyondtkl