Show
Ignore:
Timestamp:
06/09/09 11:16:27 (4 years ago)
Author:
saturday06
Message:

jioafdjasd

Location:
lang/objective-cplusplus/i3/trunk/src/mil/include/mil
Files:
6 modified

Legend:

Unmodified
Added
Removed
  • lang/objective-cplusplus/i3/trunk/src/mil/include/mil/Module.h

    r33784 r33856  
    109109            return; 
    110110        } 
    111         void* mem = NULL; 
    112         pool::MemoryList* m = NULL; 
    113         boost::tie(mem, m) = target.tls.consumer.work(&event); 
     111 
     112        pool::MemoryList* m = target.tls.consumer.pop(event.owner_id); 
    114113        if (!m) { 
    115             return; 
    116         } 
     114            target.tls.consumer.store(&event); 
     115            return; 
     116        } 
     117         
    117118        pool::ReturnMemoryEvent<pool::Blocks<Event<Data> >::value> e; 
    118119        e.memory = m; 
     
    121122            return; 
    122123        } 
    123         (reinterpret_cast<Sender*>(t))->post(e, target, mem, event.owner_id); 
     124        (reinterpret_cast<Sender*>(t))->post(e, target, (void*)&event, event.owner_id); 
    124125    } 
    125126public: 
  • lang/objective-cplusplus/i3/trunk/src/mil/include/mil/Thread.h

    r33844 r33856  
    180180    } 
    181181 
     182    MemoryList* pop(int owner_id) { 
     183        if (sizes[owner_id] > 20) { 
     184            return NULL; 
     185        } 
     186        MemoryList* result = heads[owner_id]; 
     187        heads[owner_id] = 0; 
     188        sizes[owner_id] = 0; 
     189        return result; 
     190    } 
     191 
     192    template <class T> 
     193    void store(T* mem) { 
     194        int owner_id = mem->owner_id; 
     195        MemoryList* l = (MemoryList*)mem; 
     196        int blocks = ((sizeof(T) - 1) / BLOCK_SIZE) + 1; 
     197        l->blocks = blocks; 
     198 
     199        if (blocks > MALLOC_BLOCKS_THESHOLD) { 
     200            free(mem); 
     201            return; 
     202        } 
     203 
     204        l->next = heads[owner_id]; 
     205        heads[owner_id] = l; 
     206        sizes[owner_id]++; 
     207    } 
     208 
     209/*     
    182210    template <class T> 
    183211    boost::tuple<void*, MemoryList*> work(T* mem) { 
     212        using namespace boost; 
    184213        int owner_id = mem->owner_id; 
    185214 
     
    188217            heads[owner_id] = 0; 
    189218            sizes[owner_id] = 0; 
    190             return boost::tuple<void*, MemoryList*>((void*)mem, result); 
     219            return tuple<void*, MemoryList*>((void*)mem, result); 
    191220        } 
    192221 
     
    196225        if (blocks > MALLOC_BLOCKS_THESHOLD) { 
    197226            free(mem); 
    198             return boost::tuple<void*, MemoryList*>(NULL, NULL); 
     227            return tuple<void*, MemoryList*>(NULL, NULL); 
    199228        } 
    200229 
     
    202231        heads[owner_id] = l; 
    203232        sizes[owner_id]++; 
    204         return boost::tuple<void*, MemoryList*>(NULL, NULL); 
    205     } 
     233        return tuple<void*, MemoryList*>(NULL, NULL); 
     234    } 
     235}; 
     236*/ 
    206237}; 
    207238} 
  • lang/objective-cplusplus/i3/trunk/src/mil/include/mil/gui-cocoa/GuiModule.h

    r33764 r33856  
    110110            return; 
    111111        } 
    112         void* mem = NULL; 
    113         pool::MemoryList* m = NULL; 
    114         boost::tie(mem, m) = target.tls.consumer.work(&event); 
     112 
     113        pool::MemoryList* m = target.tls.consumer.pop(event.owner_id); 
    115114        if (!m) { 
     115            target.tls.consumer.store(&event); 
    116116            return; 
    117117        } 
     118         
    118119        pool::ReturnMemoryEvent<pool::Blocks<Event<Data> >::value> e; 
    119120        e.memory = m; 
     
    122123            return; 
    123124        } 
    124         (reinterpret_cast<Sender*>(t))->post(e, target, mem, event.owner_id); 
     125        (reinterpret_cast<Sender*>(t))->post(e, target, (void*)&event, event.owner_id); 
    125126    } 
    126127public: 
  • lang/objective-cplusplus/i3/trunk/src/mil/include/mil/gui-windows/GuiModule.h

    r33844 r33856  
    119119        } 
    120120 
    121         void* mem = NULL; 
    122         pool::MemoryList* m = NULL; 
    123         boost::tie(mem, m) = target.tls.consumer.work(&event); 
     121 
     122 
     123        pool::MemoryList* m = target.tls.consumer.pop(event.owner_id); 
    124124        if (!m) { 
    125             return; 
    126         } 
     125            target.tls.consumer.store(&event); 
     126            return; 
     127        } 
     128         
    127129        pool::ReturnMemoryEvent<pool::Blocks<Event<Data> >::value> e; 
    128130        e.memory = m; 
    129         void* t =  threads[event.owner_id].load(); 
     131        void* t = threads[event.owner_id].load(); 
    130132        if (!t) { 
    131             // error 
    132             return; 
    133         } 
    134         (reinterpret_cast<Sender*>(t))->post(e, target, mem, event.owner_id); 
     133            return; 
     134        } 
     135        (reinterpret_cast<Sender*>(t))->post(e, target, (void*)&event, event.owner_id); 
    135136    } 
    136137 
  • lang/objective-cplusplus/i3/trunk/src/mil/include/mil/os-unix/Thread.h

    r33828 r33856  
    11#pragma once 
     2#include "../Atomic.h" 
    23#include "../Mil.h" 
    3 #include "../Atomic.h" 
    44#include <pthread.h> 
    55#include <unistd.h> 
     
    4646class Thread : public boost::noncopyable 
    4747{ 
    48     mil::atomic<bool> isExited; 
     48    atomic<bool> isExited; 
    4949    pthread_t t; 
    5050    pthread_attr_t a; 
     
    109109    void join() 
    110110    { 
     111        threads[thread_id].store(NULL); 
    111112        for (int retry = 50; !isExited.load(); retry--) 
    112113        { 
     
    118119        } 
    119120    } 
     121 
    120122    Thread() : isExited(true), thread_id(0) 
    121123    { 
  • lang/objective-cplusplus/i3/trunk/src/mil/include/mil/os-windows/Thread.h

    r33844 r33856  
    9898        } 
    9999 
     100        threads[thread_id].store(NULL); 
     101 
    100102        for (int retry = 50; !InterlockedExchangePointer(&isExited, 0); retry--) 
    101103        {