{"id":13729991,"url":"https://github.com/DanEngelbrecht/bikeshed","last_synced_at":"2025-05-08T02:30:58.522Z","repository":{"id":148948642,"uuid":"167684976","full_name":"DanEngelbrecht/bikeshed","owner":"DanEngelbrecht","description":"Lock free hierarchical work scheduler","archived":false,"fork":false,"pushed_at":"2024-03-17T09:22:00.000Z","size":160,"stargazers_count":111,"open_issues_count":0,"forks_count":0,"subscribers_count":7,"default_branch":"main","last_synced_at":"2025-04-10T02:08:47.436Z","etag":null,"topics":["c99","concurrency-library","lock-free","multithreading","queue-tasks","queue-workers","queued-jobs","single-header-lib","task-manager","task-runner","task-scheduler"],"latest_commit_sha":null,"homepage":"","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/DanEngelbrecht.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":"2019-01-26T12:13:27.000Z","updated_at":"2025-03-23T17:23:30.000Z","dependencies_parsed_at":null,"dependency_job_id":"ce7bdbff-1d62-4f9b-8fc8-c476a6519f12","html_url":"https://github.com/DanEngelbrecht/bikeshed","commit_stats":null,"previous_names":[],"tags_count":6,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/DanEngelbrecht%2Fbikeshed","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/DanEngelbrecht%2Fbikeshed/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/DanEngelbrecht%2Fbikeshed/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/DanEngelbrecht%2Fbikeshed/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/DanEngelbrecht","download_url":"https://codeload.github.com/DanEngelbrecht/bikeshed/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":252986653,"owners_count":21836202,"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":["c99","concurrency-library","lock-free","multithreading","queue-tasks","queue-workers","queued-jobs","single-header-lib","task-manager","task-runner","task-scheduler"],"created_at":"2024-08-03T02:01:08.547Z","updated_at":"2025-05-08T02:30:58.252Z","avatar_url":"https://github.com/DanEngelbrecht.png","language":"C++","readme":"|Branch      | OSX / Linux / Windows |\n|------------|-----------------------|\n|master      | [![Build Status](https://travis-ci.org/DanEngelbrecht/bikeshed.svg?branch=master)](https://travis-ci.org/DanEngelbrecht/bikeshed?branch=master) |\n|master      | [![Codacy Badge](https://api.codacy.com/project/badge/Grade/3f4c844382cc4314ada8d8c7ac27e544)](https://app.codacy.com/app/DanEngelbrecht/bikeshed?utm_source=github.com\u0026utm_medium=referral\u0026utm_content=DanEngelbrecht/bikeshed\u0026utm_campaign=Badge_Grade_Dashboard) |\n\n# bikeshed\nLock free hierarchical work scheduler\nBuilds with MSVC, Clang and GCC, header only, C99 compliant, MIT license.\n\nSee github for latest version: https://github.com/DanEngelbrecht/bikeshed\n\nSee design blogs at: https://danengelbrecht.github.io\n\n## Version history\n\n### Version v1.0 29/5 2019\n\n**Release 1.0**\n\n### Fixes\n - Use explicit int32_t for instead of long to ensure 32-bit values on GCC/Clang x64-builds\n - Corrected URL to blog in README.md\n - Added sample code for performance tests (in examples folder)\n\n### Version v0.4 18/5 2019\n\n**Pre-release 4**\n\n### API changes\n  - Bikeshed_AddDependencies to take array of parent task task_ids\n  - Bikeshed_ReadyCallback now gets called per channel range\n\n### API additions\n  - Bikeshed_FreeTasks\n  - BIKESHED_L1CACHE_SIZE to control ready head alignement - no padding/alignement added by default\n  - BIKESHED_CPU_YIELD to control yielding in high-contention scenarios\n\n### Fixes\n  - Added default (non-atomic) implementations for helper for unsupported platforms/compilers\n  - Codacy analisys and badge\n  - More input validation on public apis when BIKESHED_ASSERTS is enabled\n  - Batch allocation of task indexes\n  - Batch allocation of dependency indexes\n  - Batch free of task indexes\n  - Batch free of dependency indexes\n  - Fixed broken channel range detection when resolving dependencies\n\n### Version v0.3 1/5 2019\n\n**Pre-release 3**\n\n#### Fixes\n\n- Ready callback is now called when a task is readied via dependency resolve\n- Tasks are readied in batch when possible\n\n### Version v0.2 29/4 2019\n\n**Pre-release 2**\n\n#### Fixes\n\n- Internal cleanups\n- Fixed warnings and removed clang warning suppressions\n  - `-Wno-sign-conversion`\n  - `-Wno-unused-macros`\n  - `-Wno-c++98-compat`\n  - `-Wno-implicit-fallthrough`\n- Made it compile cleanly with clang++ on Windows\n\n### Version v0.1 26/4 2019\n\n**Pre-release 1**\n\n## Features\n- Generic tasks scheduling with dependecies between tasks\n  - Each task has zero or many dependecies (as defined by user)\n  - User should Ready any tasks that can execute (has zero dependencies)\n  - Automatic ready of tasks that reaches zero dependecies\n  - Automatic free of tasks that has completed\n- A task can have many parents and many child dependecies\n- Task channels - execute tasks based on task channel\n- No memory allocations once shed is created\n- Minimal dependencies\n- Memory allocation and threading are users responsability\n- Lifetime of data associated with tasks is users responsability\n- Configurable and optional assert (fatal error) behavior\n- Configurable platform dependant functions with default implementation provided\n- Header only - define `BIKESHED_IMPLEMENTATION` in one compilation unit and include `bikeshed.h`\n\n## Non-features\n- Cyclic dependency detection and resolving\n  - API is designed to help user avoid cyclic dependecies but does not do any analisys\n- Built in threading or syncronization code - API to add it is available\n- Unlimited number of active tasks - currently limited to 8 388 607 *active* tasks\n- Cancelling of tasks\n- Tagging of tasks\n\n## Dependencies\nMinimal dependecies with default overridable method for atomic operations.\n - `\u003cstdint.h\u003e`\n - `\u003cstring.h\u003e`\n - The default (optional) MSVC implementation depends on `\u003cWindows.h\u003e`.\n\n### Optional default methods\nThe default implementations for the atomic and CPU yield functions can be overridden with your own implementation by overriding the macros:\n - `BIKESHED_ATOMICADD` Atomically adds a 32-bit signed integer to another 32-bit signed integer and returns the result\n - `BIKESHED_ATOMICCAS` Atomically exchange a 32-bit signed integer with another 32-bit signed integer if the value to be swapped matches the provided compare value, returns the old value.\n - `BIKESHED_CPU_YIELD` Yield CPU (mm_pause() / YieldProcessor()).\n\n## Test code dependecies\n\nTest code has dependencies added as drop-in headers from\n - https://github.com/JCash/jctest for unit test validation\n\nTest code has dependencies added as git sub-modules from\n - https://github.com/DanEngelbrecht/nadir for threading and syncronization\n","funding_links":[],"categories":["C++"],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FDanEngelbrecht%2Fbikeshed","html_url":"https://awesome.ecosyste.ms/projects/github.com%2FDanEngelbrecht%2Fbikeshed","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FDanEngelbrecht%2Fbikeshed/lists"}