Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/emekoi/deque.zig
a lock free chase-lev deque for zig
https://github.com/emekoi/deque.zig
concurrent deque lock-free zig
Last synced: about 1 month ago
JSON representation
a lock free chase-lev deque for zig
- Host: GitHub
- URL: https://github.com/emekoi/deque.zig
- Owner: emekoi
- License: mit
- Archived: true
- Created: 2018-12-24T05:14:32.000Z (almost 6 years ago)
- Default Branch: master
- Last Pushed: 2020-04-14T00:49:45.000Z (over 4 years ago)
- Last Synced: 2024-09-25T01:07:13.886Z (about 1 month ago)
- Topics: concurrent, deque, lock-free, zig
- Language: Zig
- Size: 19.5 KB
- Stars: 16
- Watchers: 3
- Forks: 1
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
- awesome-zig - emekoi/deque.zig - lev deque for zig. (Data Structure and Algorithm / Utility)
- awesome-zig - deque.zig🗒️a lock free chase-lev deque for zig
README
# *deque.zig*
a lock free chase-lev deque for zig.
## usage
```zig
const std = @import("std");
const deque = @import("deque");const AMOUNT: usize = 100000;
const Task = struct {
const Self = @This();
stealer: deque.Stealer(usize, 32),
data: [AMOUNT]usize = [_]usize{0} ** AMOUNT,fn task(self: *Self) void {
while (self.stealer.steal()) |i| {
defer std.testing.expectEqual(i, self.data[i]);
self.data[i] += i;
}
}fn verify(self: Self) void {
for (self.data[0..]) |*i, idx| {
std.testing.expectEqual(idx, i.*);
}
}
};pub fn main() !void {
var slice = try std.heap.direct_allocator.alloc(u8, 1 << 24);
var fba = std.heap.ThreadSafeFixedBufferAllocator.init(slice);
var alloc = &fba.allocator;var d = try deque.Deque(usize, 32).new(alloc);
defer d.deinit();var i: usize = 0;
const worker = d.worker();
while (i < AMOUNT) : (i += 1) {
try worker.push(i);
}var threads: [4]*std.Thread = undefined;
var task = Task{
.stealer = d.stealer(),
};for (threads) |*thread|
thread.* = try Thread.spawn(&task, Task.task);for (threads) |thread|
thread.wait();task.verify();
}
```