commit 1c61cb0b2194c097ba401ae73658399b2de7976d Author: lls Date: Fri Mar 7 11:13:53 2025 +0800 线程池 Signed-off-by: lls diff --git a/.vs/neicunchi/v16/.suo b/.vs/neicunchi/v16/.suo new file mode 100644 index 0000000..0b0a8ce Binary files /dev/null and b/.vs/neicunchi/v16/.suo differ diff --git a/.vs/neicunchi/v16/Browse.VC.db b/.vs/neicunchi/v16/Browse.VC.db new file mode 100644 index 0000000..8d41d0f Binary files /dev/null and b/.vs/neicunchi/v16/Browse.VC.db differ diff --git a/.vs/neicunchi/v16/ipch/AutoPCH/12d2e83398a27eea/NEICUN.ipch b/.vs/neicunchi/v16/ipch/AutoPCH/12d2e83398a27eea/NEICUN.ipch new file mode 100644 index 0000000..be31115 Binary files /dev/null and b/.vs/neicunchi/v16/ipch/AutoPCH/12d2e83398a27eea/NEICUN.ipch differ diff --git a/.vs/neicunchi/v16/ipch/AutoPCH/319cfbe175f2f6/源.ipch b/.vs/neicunchi/v16/ipch/AutoPCH/319cfbe175f2f6/源.ipch new file mode 100644 index 0000000..e92c4bb Binary files /dev/null and b/.vs/neicunchi/v16/ipch/AutoPCH/319cfbe175f2f6/源.ipch differ diff --git a/.vs/neicunchi/v16/ipch/AutoPCH/a8ab40748ee8484f/NEICUN.ipch b/.vs/neicunchi/v16/ipch/AutoPCH/a8ab40748ee8484f/NEICUN.ipch new file mode 100644 index 0000000..de3bc9a Binary files /dev/null and b/.vs/neicunchi/v16/ipch/AutoPCH/a8ab40748ee8484f/NEICUN.ipch differ diff --git a/neicun.cpp b/neicun.cpp new file mode 100644 index 0000000..a607025 --- /dev/null +++ b/neicun.cpp @@ -0,0 +1,43 @@ +#include"neicun.h" +#include +#include // operator new operator delete Ķ + +// 캯 +ThreadSafeMemoryPool::ThreadSafeMemoryPool(size_t blockSize, size_t blockCount) + : blockSize_(blockSize), blockCount_(blockCount) { + init(); +} + +// ڴ +void* ThreadSafeMemoryPool::allocate() { + std::lock_guard lock(mutex_); + if (freeBlocks_.empty()) { + std::cerr << "Memory pool exhausted!" << std::endl; + return nullptr; + } + void* block = freeBlocks_.back(); + freeBlocks_.pop_back(); + return block; +} + +// ͷڴ +void ThreadSafeMemoryPool::deallocate(void* ptr) { + std::lock_guard lock(mutex_); + freeBlocks_.push_back(ptr); +} + +// +ThreadSafeMemoryPool::~ThreadSafeMemoryPool() { + for (void* block : allocatedBlocks_) { + ::operator delete(block); // ʹȫֵ operator delete ͷڴ + } +} + +// ʼڴ +void ThreadSafeMemoryPool::init() { + for (size_t i = 0; i < blockCount_; ++i) { + void* block = ::operator new(blockSize_); // ʹȫֵ operator new ڴ + allocatedBlocks_.push_back(block); + freeBlocks_.push_back(block); + } +} \ No newline at end of file diff --git a/neicun.h b/neicun.h new file mode 100644 index 0000000..9eaffef --- /dev/null +++ b/neicun.h @@ -0,0 +1,32 @@ +#ifndef THREAD_SAFE_MEMORY_POOL_H +#define THREAD_SAFE_MEMORY_POOL_H + +#include +#include + +class ThreadSafeMemoryPool { +public: + // 캯 + ThreadSafeMemoryPool(size_t blockSize, size_t blockCount); + + // ڴ + void* allocate(); + + // ͷڴ + void deallocate(void* ptr); + + // + ~ThreadSafeMemoryPool(); + +private: + // ʼڴ + void init(); + + size_t blockSize_; // ÿĴС + size_t blockCount_; // + std::vector freeBlocks_; // пб + std::vector allocatedBlocks_; // ѷĿб + std::mutex mutex_; // +}; + +#endif // THREAD_SAFE_MEMORY_POOL_H \ No newline at end of file diff --git a/neicunchi.sln b/neicunchi.sln new file mode 100644 index 0000000..168f9a4 --- /dev/null +++ b/neicunchi.sln @@ -0,0 +1,31 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 16 +VisualStudioVersion = 16.0.33801.447 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "neicunchi", "neicunchi.vcxproj", "{3A937062-81DC-4812-8D4E-9126E86C78F6}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|x64 = Debug|x64 + Debug|x86 = Debug|x86 + Release|x64 = Release|x64 + Release|x86 = Release|x86 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {3A937062-81DC-4812-8D4E-9126E86C78F6}.Debug|x64.ActiveCfg = Debug|x64 + {3A937062-81DC-4812-8D4E-9126E86C78F6}.Debug|x64.Build.0 = Debug|x64 + {3A937062-81DC-4812-8D4E-9126E86C78F6}.Debug|x86.ActiveCfg = Debug|Win32 + {3A937062-81DC-4812-8D4E-9126E86C78F6}.Debug|x86.Build.0 = Debug|Win32 + {3A937062-81DC-4812-8D4E-9126E86C78F6}.Release|x64.ActiveCfg = Release|x64 + {3A937062-81DC-4812-8D4E-9126E86C78F6}.Release|x64.Build.0 = Release|x64 + {3A937062-81DC-4812-8D4E-9126E86C78F6}.Release|x86.ActiveCfg = Release|Win32 + {3A937062-81DC-4812-8D4E-9126E86C78F6}.Release|x86.Build.0 = Release|Win32 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {CA2C40AD-79EE-41CC-B603-15B602F23D4F} + EndGlobalSection +EndGlobal diff --git a/neicunchi.vcxproj b/neicunchi.vcxproj new file mode 100644 index 0000000..b4c6622 --- /dev/null +++ b/neicunchi.vcxproj @@ -0,0 +1,150 @@ + + + + + Debug + Win32 + + + Release + Win32 + + + Debug + x64 + + + Release + x64 + + + + 16.0 + Win32Proj + {3a937062-81dc-4812-8d4e-9126e86c78f6} + neicunchi + 10.0 + + + + Application + true + v142 + Unicode + + + Application + false + v142 + true + Unicode + + + Application + true + v142 + Unicode + + + Application + false + v142 + true + Unicode + + + + + + + + + + + + + + + + + + + + + true + + + false + + + true + + + false + + + + Level3 + true + WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + + + Console + true + + + + + Level3 + true + true + true + WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + + + Console + true + true + true + + + + + Level3 + true + _DEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + + + Console + true + + + + + Level3 + true + true + true + NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + + + Console + true + true + true + + + + + + + + + + + + \ No newline at end of file diff --git a/neicunchi.vcxproj.filters b/neicunchi.vcxproj.filters new file mode 100644 index 0000000..8d8fcd4 --- /dev/null +++ b/neicunchi.vcxproj.filters @@ -0,0 +1,27 @@ + + + + + {4FC737F1-C7A5-4376-A066-2A32D752A2FF} + cpp;c;cc;cxx;c++;cppm;ixx;def;odl;idl;hpj;bat;asm;asmx + + + {93995380-89BD-4b04-88EB-625FBE52EBFB} + h;hh;hpp;hxx;h++;hm;inl;inc;ipp;xsd + + + {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} + rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms + + + + + 源文件 + + + + + 头文件 + + + \ No newline at end of file diff --git a/neicunchi.vcxproj.user b/neicunchi.vcxproj.user new file mode 100644 index 0000000..88a5509 --- /dev/null +++ b/neicunchi.vcxproj.user @@ -0,0 +1,4 @@ + + + + \ No newline at end of file