{"id":13735839,"url":"https://github.com/elijahr/lockfreequeues","last_synced_at":"2025-04-09T16:18:01.071Z","repository":{"id":45423897,"uuid":"276770166","full_name":"elijahr/lockfreequeues","owner":"elijahr","description":"Lock-free queue implementations for Nim.","archived":false,"fork":false,"pushed_at":"2024-09-29T00:00:30.000Z","size":551,"stargazers_count":44,"open_issues_count":0,"forks_count":4,"subscribers_count":4,"default_branch":"devel","last_synced_at":"2025-04-09T16:17:54.326Z","etag":null,"topics":["circular-buffer","lock-free","mpmc","mpsc","nim","queue","ring-buffer","spsc"],"latest_commit_sha":null,"homepage":"","language":"Nim","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/elijahr.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","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":"AUTHORS","dei":null,"publiccode":null,"codemeta":null}},"created_at":"2020-07-03T00:20:00.000Z","updated_at":"2025-01-25T00:07:47.000Z","dependencies_parsed_at":"2024-01-12T03:36:36.149Z","dependency_job_id":"1d2b52b0-c738-4c75-af20-dc04b8840c37","html_url":"https://github.com/elijahr/lockfreequeues","commit_stats":null,"previous_names":[],"tags_count":12,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/elijahr%2Flockfreequeues","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/elijahr%2Flockfreequeues/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/elijahr%2Flockfreequeues/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/elijahr%2Flockfreequeues/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/elijahr","download_url":"https://codeload.github.com/elijahr/lockfreequeues/tar.gz/refs/heads/devel","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248065281,"owners_count":21041872,"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":["circular-buffer","lock-free","mpmc","mpsc","nim","queue","ring-buffer","spsc"],"created_at":"2024-08-03T03:01:11.898Z","updated_at":"2025-04-09T16:18:01.030Z","avatar_url":"https://github.com/elijahr.png","language":"Nim","readme":"[![build](https://github.com/elijahr/lockfreequeues/actions/workflows/build.yml/badge.svg)](https://github.com/elijahr/lockfreequeues/actions/workflows/build.yml)\n\n# lockfreequeues\n\nLock-free queues for Nim, implemented as ring buffers.\n\nThree implementations are provided:\n\n- [`Sipsic`](https://elijahr.github.io/lockfreequeues/lockfreequeues/sipsic.html) is a single-producer, single-consumer bounded queue. Pushing and popping are wait-free.\n- [`Mupsic`](https://elijahr.github.io/lockfreequeues/lockfreequeues/mupsic.html) is a multi-producer, single-consumer bounded queue. Popping is wait-free.\n- [`Mupmuc`](https://elijahr.github.io/lockfreequeues/lockfreequeues/mupmuc.html) is a multi-producer, multi-consumer bounded queue.\n\nAPI documentation: https://elijahr.github.io/lockfreequeues\n\n## Installation\n\n```sh\nnimble install lockfreequeues\n```\n\n## Examples\n\nExamples are located in the [examples](https://github.com/elijahr/lockfreequeues/tree/master/examples) directory and can be compiled and run with:\n\n```sh\nnimble examples\n```\n\n## Reference\n\n- Juho Snellman's post [\"I've been writing ring buffers wrong all these years\"](https://www.snellman.net/blog/archive/2016-12-13-ring-buffers/) ([alt](https://web.archive.org/web/20200530040210/https://www.snellman.net/blog/archive/2016-12-13-ring-buffers/))\n- Mamy Ratsimbazafy's [research on SPSC channels](https://github.com/mratsim/weave/blob/master/weave/cross_thread_com/channels_spsc.md#litterature) for weave.\n- Henrique F Bucher's post [\"Yes, You Have Been Writing SPSC Queues Wrong Your Entire Life\"](http://www.vitorian.com/x1/archives/370) ([alt](https://web.archive.org/web/20191225164231/http://www.vitorian.com/x1/archives/370))\n\nMany thanks to Mamy Ratsimbazafy for reviewing the initial release and offering suggestions.\n\n## Contributing\n\n- Pull requests and feature requests are welcome!\n- Please file any issues you encounter.\n- For pull requests, please see the [contribution guidelines](https://github.com/elijahr/lockfreequeues/tree/master/CONTRIBUTING.md).\n\n## Running tests\n\nTests can be run locally with `nimble test`.\n\nCI runs the test suite for both C and C++ targets on:\n- Linux `x86_64` and `aarch64`\n- macOS `x86_64`\n\nThe test suite is also run with [LLVM thread sanitization](https://clang.llvm.org/docs/ThreadSanitizer.html) to check for data races.\n","funding_links":[],"categories":["Operating System"],"sub_categories":["IO"],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Felijahr%2Flockfreequeues","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Felijahr%2Flockfreequeues","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Felijahr%2Flockfreequeues/lists"}