Changeset 33856 for lang/objective-cplusplus/i3/trunk/src/mil/include
- Timestamp:
- 06/09/09 11:16:27 (4 years ago)
- Location:
- lang/objective-cplusplus/i3/trunk/src/mil/include/mil
- Files:
-
- 6 modified
-
Module.h (modified) (2 diffs)
-
Thread.h (modified) (4 diffs)
-
gui-cocoa/GuiModule.h (modified) (2 diffs)
-
gui-windows/GuiModule.h (modified) (1 diff)
-
os-unix/Thread.h (modified) (4 diffs)
-
os-windows/Thread.h (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
lang/objective-cplusplus/i3/trunk/src/mil/include/mil/Module.h
r33784 r33856 109 109 return; 110 110 } 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); 114 113 if (!m) { 115 return; 116 } 114 target.tls.consumer.store(&event); 115 return; 116 } 117 117 118 pool::ReturnMemoryEvent<pool::Blocks<Event<Data> >::value> e; 118 119 e.memory = m; … … 121 122 return; 122 123 } 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); 124 125 } 125 126 public: -
lang/objective-cplusplus/i3/trunk/src/mil/include/mil/Thread.h
r33844 r33856 180 180 } 181 181 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 /* 182 210 template <class T> 183 211 boost::tuple<void*, MemoryList*> work(T* mem) { 212 using namespace boost; 184 213 int owner_id = mem->owner_id; 185 214 … … 188 217 heads[owner_id] = 0; 189 218 sizes[owner_id] = 0; 190 return boost::tuple<void*, MemoryList*>((void*)mem, result);219 return tuple<void*, MemoryList*>((void*)mem, result); 191 220 } 192 221 … … 196 225 if (blocks > MALLOC_BLOCKS_THESHOLD) { 197 226 free(mem); 198 return boost::tuple<void*, MemoryList*>(NULL, NULL);227 return tuple<void*, MemoryList*>(NULL, NULL); 199 228 } 200 229 … … 202 231 heads[owner_id] = l; 203 232 sizes[owner_id]++; 204 return boost::tuple<void*, MemoryList*>(NULL, NULL); 205 } 233 return tuple<void*, MemoryList*>(NULL, NULL); 234 } 235 }; 236 */ 206 237 }; 207 238 } -
lang/objective-cplusplus/i3/trunk/src/mil/include/mil/gui-cocoa/GuiModule.h
r33764 r33856 110 110 return; 111 111 } 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); 115 114 if (!m) { 115 target.tls.consumer.store(&event); 116 116 return; 117 117 } 118 118 119 pool::ReturnMemoryEvent<pool::Blocks<Event<Data> >::value> e; 119 120 e.memory = m; … … 122 123 return; 123 124 } 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); 125 126 } 126 127 public: -
lang/objective-cplusplus/i3/trunk/src/mil/include/mil/gui-windows/GuiModule.h
r33844 r33856 119 119 } 120 120 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); 124 124 if (!m) { 125 return; 126 } 125 target.tls.consumer.store(&event); 126 return; 127 } 128 127 129 pool::ReturnMemoryEvent<pool::Blocks<Event<Data> >::value> e; 128 130 e.memory = m; 129 void* t = threads[event.owner_id].load();131 void* t = threads[event.owner_id].load(); 130 132 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); 135 136 } 136 137 -
lang/objective-cplusplus/i3/trunk/src/mil/include/mil/os-unix/Thread.h
r33828 r33856 1 1 #pragma once 2 #include "../Atomic.h" 2 3 #include "../Mil.h" 3 #include "../Atomic.h"4 4 #include <pthread.h> 5 5 #include <unistd.h> … … 46 46 class Thread : public boost::noncopyable 47 47 { 48 mil::atomic<bool> isExited;48 atomic<bool> isExited; 49 49 pthread_t t; 50 50 pthread_attr_t a; … … 109 109 void join() 110 110 { 111 threads[thread_id].store(NULL); 111 112 for (int retry = 50; !isExited.load(); retry--) 112 113 { … … 118 119 } 119 120 } 121 120 122 Thread() : isExited(true), thread_id(0) 121 123 { -
lang/objective-cplusplus/i3/trunk/src/mil/include/mil/os-windows/Thread.h
r33844 r33856 98 98 } 99 99 100 threads[thread_id].store(NULL); 101 100 102 for (int retry = 50; !InterlockedExchangePointer(&isExited, 0); retry--) 101 103 {
![(please configure the [header_logo] section in trac.ini)](/share/chrome/site/your_project_logo.png)