{"id":19149954,"url":"https://github.com/andreiavrammsd/cpp-channel","last_synced_at":"2025-04-04T22:04:00.798Z","repository":{"id":37086645,"uuid":"239807950","full_name":"andreiavrammsd/cpp-channel","owner":"andreiavrammsd","description":"Thread-safe container for sharing data between threads","archived":false,"fork":false,"pushed_at":"2024-08-11T13:21:06.000Z","size":132,"stargazers_count":484,"open_issues_count":5,"forks_count":33,"subscribers_count":9,"default_branch":"master","last_synced_at":"2025-03-28T21:04:56.702Z","etag":null,"topics":["channel","concurrent-queue","cpp","multithreading","queue","synchronized-queue","thread-safe","thread-safe-queue"],"latest_commit_sha":null,"homepage":"https://blog.andreiavram.ro/cpp-channel-thread-safe-container-share-data-threads/","language":"C++","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/andreiavrammsd.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2020-02-11T16:20:01.000Z","updated_at":"2025-03-26T22:53:12.000Z","dependencies_parsed_at":"2024-01-31T09:02:50.835Z","dependency_job_id":"29ce61ea-442d-45c8-8947-557a54fc3ea9","html_url":"https://github.com/andreiavrammsd/cpp-channel","commit_stats":{"total_commits":215,"total_committers":5,"mean_commits":43.0,"dds":0.06046511627906981,"last_synced_commit":"38ffdec0b7eec2acbbe98026663d1a7e1acc29eb"},"previous_names":[],"tags_count":15,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/andreiavrammsd%2Fcpp-channel","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/andreiavrammsd%2Fcpp-channel/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/andreiavrammsd%2Fcpp-channel/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/andreiavrammsd%2Fcpp-channel/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/andreiavrammsd","download_url":"https://codeload.github.com/andreiavrammsd/cpp-channel/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247256107,"owners_count":20909240,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["channel","concurrent-queue","cpp","multithreading","queue","synchronized-queue","thread-safe","thread-safe-queue"],"created_at":"2024-11-09T08:10:10.248Z","updated_at":"2025-04-04T22:04:00.781Z","avatar_url":"https://github.com/andreiavrammsd.png","language":"C++","readme":"# Channel\n\n[![build](https://github.com/andreiavrammsd/cpp-channel/workflows/build/badge.svg)](https://github.com/andreiavrammsd/cpp-channel/actions)\n\n[![codecov](https://codecov.io/github/andreiavrammsd/cpp-channel/graph/badge.svg?token=CKQ0TVW62Z)](https://codecov.io/github/andreiavrammsd/cpp-channel)\n\n### Thread-safe container for sharing data between threads. Header-only.\n\n* Thread-safe push and fetch.\n* Use stream operators to push (\u003c\u003c) and fetch (\u003e\u003e) items.\n* Value type must be default constructible.\n* Blocking (forever waiting to fetch).\n* Range-based for loop supported.\n* Close to prevent pushing and stop waiting to fetch.\n* Integrates well with STL algorithms in some cases. Eg: std::move(ch.begin(), ch.end(), ...).\n* Tested with GCC, Clang, and MSVC.\n\n## Requirements\n\n* C++11 or newer\n\n## Installation\n\nCopy the [include](./include) directory to your project and add it to your include path. Or\nsee [CMakeLists.txt](./examples/cmake-project/CMakeLists.txt) from the [CMake project example](./examples/cmake-project)\n.\n\n## Usage\n\n```c++\n#include \u003ccassert\u003e\n\n#include \u003cmsd/channel.hpp\u003e\n\nint main() {\n    msd::channel\u003cint\u003e chan; // unbuffered\n\n    int in = 1;\n    int out = 0;\n\n    // Send to channel\n    chan \u003c\u003c in;\n\n    // Read from channel\n    chan \u003e\u003e out;\n\n    assert(out == 1);\n}\n```\n\n```c++\n#include \u003cmsd/channel.hpp\u003e\n\nint main() {\n    msd::channel\u003cint\u003e chan{2}; // buffered\n\n    // Send to channel\n    chan \u003c\u003c 1;\n    chan \u003c\u003c 2;\n    chan \u003c\u003c 3; // blocking because capacity is 2 (and no one reads from channel)\n}\n```\n\n```c++\n#include \u003cmsd/channel.hpp\u003e\n\nint main() {\n    msd::channel\u003cint\u003e chan{2}; // buffered\n\n    int in = 1;\n    int out = 0;\n\n    // Send to channel\n    chan \u003c\u003c in;\n    chan \u003c\u003c in;\n\n    // Read from channel\n    chan \u003e\u003e out;\n    chan \u003e\u003e out;\n    chan \u003e\u003e out; // blocking because channel is empty (and no one writes on it)\n}\n```\n\n```c++\n#include \u003ciostream\u003e\n\n#include \u003cmsd/channel.hpp\u003e\n\nint main() {\n    msd::channel\u003cint\u003e chan;\n\n    int in1 = 1;\n    int in2 = 2;\n\n    chan \u003c\u003c in1 \u003c\u003c in2;\n\n    for (const auto out : chan) { // blocking: forever waiting for channel items\n        std::cout \u003c\u003c out \u003c\u003c '\\n';\n    }\n}\n```\n\nSee [examples](examples).\n\n\u003cbr\u003e\n\nDeveloped with [CLion](https://www.jetbrains.com/?from=serializer)\n\n\u003ca href=\"https://www.jetbrains.com/?from=serializer\"\u003e![JetBrains](jetbrains.svg)\u003c/a\u003e\n","funding_links":[],"categories":["Concurrency"],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fandreiavrammsd%2Fcpp-channel","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fandreiavrammsd%2Fcpp-channel","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fandreiavrammsd%2Fcpp-channel/lists"}