{"id":16431477,"url":"https://github.com/dcastro/dequenet","last_synced_at":"2025-03-23T07:34:58.224Z","repository":{"id":12710254,"uuid":"15382768","full_name":"dcastro/DequeNET","owner":"dcastro","description":null,"archived":false,"fork":false,"pushed_at":"2016-11-01T00:05:57.000Z","size":596,"stargazers_count":29,"open_issues_count":2,"forks_count":9,"subscribers_count":3,"default_branch":"master","last_synced_at":"2025-03-16T14:19:48.303Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"C#","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/dcastro.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.txt","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2013-12-22T22:00:47.000Z","updated_at":"2025-03-12T15:48:58.000Z","dependencies_parsed_at":"2022-09-23T09:11:58.908Z","dependency_job_id":null,"html_url":"https://github.com/dcastro/DequeNET","commit_stats":null,"previous_names":[],"tags_count":3,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dcastro%2FDequeNET","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dcastro%2FDequeNET/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dcastro%2FDequeNET/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dcastro%2FDequeNET/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/dcastro","download_url":"https://codeload.github.com/dcastro/DequeNET/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":244286712,"owners_count":20428819,"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":[],"created_at":"2024-10-11T08:30:25.791Z","updated_at":"2025-03-23T07:34:57.848Z","avatar_url":"https://github.com/dcastro.png","language":"C#","funding_links":[],"categories":[],"sub_categories":[],"readme":"# DequeNET\n\nDequeNET (pronounced Deck Net) provides a concurrent lock-free deque C# implementation.\nA deque, or double-ended queue, is a data structure that allows insertion and removal of items on both ends.\nAs such, `ConcurrentDeque\u003cT\u003e` supports 4 main operations (PushRight, PopRight, PushLeft and PopLeft) plus 2 others (PeekRight and PeekLeft).\n\nThe library also offers a simpler `Deque\u003cT\u003e` (not thread safe), implemented as a ring buffer.\nThis implementation allows all 6 operations to be executed in constant time O(1).\n\n\n### The Algorithm\n\nThe implementation is based on the algorithm proposed by Maged M. Michael [1].\nThe algorithm uses the atomic primitive CAS (compare-and-swap) to achieve lock-freedom.\nBecause of this property, the algorithm guarantees system-wide progress (i.e., an operation will always complete within a finite number of steps) and is immune to deadlocks, unlike traditional mutual exclusion techniques.\n\nWithout contention, all four main operations run in constant time O(1).\nUnder contention by P processes, the operations' total work is O(P).\nPeekRight and PeekLeft run in constant time regardless of contention.\n\n\n[1] Michael, Maged, 2003, CAS-Based Lock-Free Algorithm for Shared Deques, *Euro-Par 2003 Parallel Processing*, v. 2790, p. 651-660, http://www.research.ibm.com/people/m/michael/europar-2003.pdf (Decembre 22, 2013).\n\n\n### NuGet\n\nTo install DequeNET, run the following command in the Package Manager Console\n\n```\nPM\u003e Install-Package DequeNET\n```\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdcastro%2Fdequenet","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdcastro%2Fdequenet","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdcastro%2Fdequenet/lists"}