Socket
Book a DemoInstallSign in
Socket

zsling

Package Overview
Dependencies
Maintainers
0
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

zsling

0.1.2
Source
Cargo
Version published
Maintainers
0
Created
Source

This crates provides a sequentially locking Ring Buffer. It allows for a fast and non-writer-blocking SPMC-queue, where all consumers read all messages.

Original

This is the Rust-wrapped Zig version of the sling crate. Note that due to current constraints in the implementation, the buffer size is set to 256 and the and messages are set to [u8; 8].

Usage

There are two ways of consuming from the queue. If threads share a SharedReader through a shared reference, they will steal queue items from one anothers such that no two threads will read the same message. When a SharedReader is cloned, the new SharedReader's reading progress will no longer affect the other one. If two threads each use a separate SharedReader, they will be able to read the same messages.

# use zsling::*;

let buffer = RingBuffer::new();

let mut writer = buffer.try_lock().unwrap();
let mut reader = buffer.reader();

std::thread::scope(|s| {
    let reader = &reader;
    for t in 0..8 {
        s.spawn(move || {
            for _ in 0..100 {
                if let Some(val) = reader.pop_front() {
                    println!("t: {}, val: {:?}", t, val);
                };
            }
        });
    }

    for i in 0..100 {
        writer.push_back([0, 1, 2, 3, 4, 5, 6, 7]);
    }
});

Important!

It is also important to keep in mind, that slow readers will be overrun by the writer if they do not consume messages quickly enough. This can happen quite frequently if the buffer size is not large enough. It is advisable to test applications on a case-by-case basis and find a buffer size that is optimal to your use-case.

FAQs

Package last updated on 19 Feb 2023

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts

SocketSocket SOC 2 Logo

Product

About

Packages

Stay in touch

Get open source security insights delivered straight into your inbox.

  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc

U.S. Patent No. 12,346,443 & 12,314,394. Other pending.