木头云 78be284668 fix(test): correct test logic and semantics in multiple test cases
1. ChannelTest::MultipleSendersReceivers
   - Add C++14-compatible latch implementation (similar to C++20 std::latch)
   - Ensure receivers are ready before senders start sending messages
   - This prevents race condition where senders might send before receivers are listening

2. RWLockTest::ReadWriteReadPattern
   - Fix test logic: lock_shared allows multiple concurrent readers
   - Previous test had race condition where both threads could read same value
   - New test: each thread writes based on thread id (1 or 2), then reads
   - Expected result: 1*20 + 2*20 = 60

3. ShmTest::ReleaseMemory
   - Correct return value semantics: release() returns ref count before decrement, or -1 on error
   - Must call get_mem() to map memory and set ref count to 1 before release
   - Expected: release() returns 1 (ref count before decrement)

4. ShmTest::ReferenceCount
   - Correct semantics: ref count is 0 after acquire (memory not mapped)
   - get_mem() maps memory and sets ref count to 1
   - Second acquire+get_mem increases ref count to 2
   - Test now properly validates reference counting behavior

5. ShmTest::SubtractReference
   - sub_ref() only works after get_mem() has mapped the memory
   - Must call get_mem() first to initialize ref count to 1
   - sub_ref() then decrements it to 0
   - Test now follows correct API usage pattern
2025-11-30 06:06:54 +00:00
.github/workflows Update c-cpp.yml 2021-07-10 13:52:44 +08:00
3rdparty Fixed memory access exception in multithreading. 2023-10-28 16:44:16 +08:00
demo mingw: use lower case windows.h 2025-11-17 09:56:49 +00:00
include/libipc docs(shm): add semantic comments for release/remove and fix double-free in tests 2025-11-30 05:28:48 +00:00
src refactor(buffer): rename 'additional' parameter to 'mem_to_free' for clarity 2025-11-30 05:09:56 +00:00
test fix(test): correct test logic and semantics in multiple test cases 2025-11-30 06:06:54 +00:00
.gitignore disable warning C4858 2023-10-28 16:44:16 +08:00
CMakeLists.txt Supplement similar demo under linux. 2023-10-28 16:44:16 +08:00
LICENSE 调整目录结构,隔离include路径,修正tls在win下的问题 2020-09-13 17:29:14 +08:00
performance.xlsx performance.xlsx 更新图示说明 2021-10-17 14:32:38 +08:00
README.md Update README.md 2025-02-09 17:00:48 +08:00

cpp-ipc (libipc) - C++ IPC Library

MIT licensed Build Status Build status Vcpkg package

A high-performance inter-process communication library using shared memory on Linux/Windows.

  • Compilers with C++17 support are recommended (msvc-2017/gcc-7/clang-4)
  • No other dependencies except STL.
  • Only lock-free or lightweight spin-lock is used.
  • Circular array is used as the underline data structure.
  • ipc::route supports single write and multiple read. ipc::channel supports multiple read and write. (Note: currently, a channel supports up to 32 receivers, but there is no such a limit for the sender.)
  • Broadcasting is used by default, but user can choose any read/ write combinations.
  • No long time blind wait. (Semaphore will be used after a certain number of retries.)
  • Vcpkg way of installation is supported. E.g. vcpkg install cpp-ipc

Usage

See: Wiki

Performance

Environment Value
Device Lenovo ThinkPad T450
CPU Intel® Core™ i5-4300U @ 2.5 GHz
RAM 16 GB
OS Windows 7 Ultimate x64
Compiler MSVC 2017 15.9.4

Unit & benchmark tests: test
Performance data: performance.xlsx

Reference


使用共享内存的跨平台Linux/Windowsx86/x64/ARM高性能IPC通讯库

  • 推荐支持C++17的编译器msvc-2017/gcc-7/clang-4
  • 除STL外无其他依赖
  • 无锁lock-free或轻量级spin-lock
  • 底层数据结构为循环数组circular array
  • ipc::route支持单写多读,ipc::channel支持多写多读【注意目前同一条通道最多支持32个receiversender无限制
  • 默认采用广播模式收发数据,支持用户任意选择读写方案
  • 不会长时间忙等(重试一定次数后会使用信号量进行等待),支持超时
  • 支持Vcpkg方式安装,如vcpkg install cpp-ipc

使用方法

详见:Wiki

性能

环境
设备 联想 ThinkPad T450
CPU 英特尔® Core™ i5-4300U @ 2.5 GHz
内存 16 GB
操作系统 Windows 7 Ultimate x64
编译器 MSVC 2017 15.9.4

单元测试和Benchmark测试: test
性能数据: performance.xlsx

参考