{"id":18388597,"url":"https://github.com/mattkretz/lockfree_ring","last_synced_at":"2026-02-27T00:32:42.365Z","repository":{"id":55404643,"uuid":"83546787","full_name":"mattkretz/lockfree_ring","owner":"mattkretz","description":"lock-free queue, implemented as a ring-buffer on the stack","archived":false,"fork":false,"pushed_at":"2017-03-24T08:09:56.000Z","size":33,"stargazers_count":6,"open_issues_count":0,"forks_count":1,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-04-07T02:35:22.342Z","etag":null,"topics":["cpp","cpp17","lock-free","ringbuffer"],"latest_commit_sha":null,"homepage":"","language":"C++","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"bsd-3-clause","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/mattkretz.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}},"created_at":"2017-03-01T11:22:39.000Z","updated_at":"2022-08-09T17:50:23.000Z","dependencies_parsed_at":"2022-08-14T23:40:17.443Z","dependency_job_id":null,"html_url":"https://github.com/mattkretz/lockfree_ring","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/mattkretz/lockfree_ring","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mattkretz%2Flockfree_ring","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mattkretz%2Flockfree_ring/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mattkretz%2Flockfree_ring/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mattkretz%2Flockfree_ring/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/mattkretz","download_url":"https://codeload.github.com/mattkretz/lockfree_ring/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mattkretz%2Flockfree_ring/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29879034,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-26T23:51:21.483Z","status":"ssl_error","status_checked_at":"2026-02-26T23:50:46.793Z","response_time":89,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"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":["cpp","cpp17","lock-free","ringbuffer"],"created_at":"2024-11-06T01:35:01.743Z","updated_at":"2026-02-27T00:32:42.345Z","avatar_url":"https://github.com/mattkretz.png","language":"C++","funding_links":[],"categories":[],"sub_categories":[],"readme":"Lock-free queue using a ring buffer on the stack\n==================================================\n\n[![license](https://img.shields.io/github/license/mattkretz/lockfree_ring.svg)](https://github.com/mattkretz/lockfree_ring/blob/master/LICENSE)\n[![language](https://img.shields.io/badge/language-C%2B%2B11-blue.svg)](https://isocpp.org/)\n[![depends](https://img.shields.io/badge/depends-virtest-brightgreen.svg)](https://github.com/mattkretz/virtest)\n\n[![Build Status](https://travis-ci.org/mattkretz/lockfree_ring.svg)](https://travis-ci.org/mattkretz/lockfree_ring)\n[![Build status](https://ci.appveyor.com/api/projects/status/5k3wkpxvoqf99ef6?svg=true)](https://ci.appveyor.com/project/mattkretz/lockfree_ring)\n\nExample\n--------------\n\n```C++\n#include \u003clockfree_ring.h\u003e\n\n// consumer threads:\nvoid consumer(vir::lockfree_ring\u003cData\u003e \u0026q)\n{\n  while (keep_running) {\n    auto popper = q.pop_front();\n    for (;;) {\n      std::optional\u003cData\u003e data = popper.get();\n      if (data) {\n        do_work(data.value);\n        break;\n      }\n      do_something_else();\n    }\n  }\n}\n\n// producer threads:\nvoid producer(vir::lockfree_ring\u003cData\u003e \u0026q)\n{\n  while (keep_running) {\n    Data data = produce_data();\n    auto pusher = q.prepare_push(std::move(data));\n    while (!pusher.try_push()) {\n       do_something_else();\n    }\n  }\n}\n```\n\nRemarks\n--------------\n\nThere is little guarantee about ordering and no guarantee about fairness.  \nHowever, if the size of the ring is larger than the number of active reader \nobjects (returned from `pop_front()`) then all consumers will eventually be \nable to read a value (unless one of the writers does not fill its `pusher` \nobject).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmattkretz%2Flockfree_ring","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmattkretz%2Flockfree_ring","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmattkretz%2Flockfree_ring/lists"}