Zig 0.17.0-dev (Split by item)
This is an example of documentation generated by
ZigDoc , an alternative to Zig's built-in
Auto Doc feature. See also
examples in other modes/formats . The project being documented here (as the example) is the Zig library itself.
Zig › std/ › Io/ › Uring.zig › Thread
Thread
Uring.Thread
const Thread = struct
File
Code
const Thread = struct {
required_align : void align (4 ),
thread : std .Thread ,
idle_context : Io .fiber .Context ,
current_context : *Io .fiber .Context ,
ready_queue : ?*Fiber ,
free_queue : ?*Fiber ,
io_uring : IoUring ,
idle_search_index : u32 ,
steal_ready_search_index : u32 ,
steal_free_search_index : u32 ,
name_arena : if (tracy .enable ) std .heap .ArenaAllocator .State else struct {},
csprng : Csprng ,
threadlocal var self : ?*Thread = null ;
noinline fn current () *Thread {
return self .?;
}
fn deinit (thread : *Thread , gpa : Allocator ) void {
var next_fiber = thread .free_queue ;
while (next_fiber ) |free_fiber | {
next_fiber = free_fiber .status .free_next ;
gpa .free (free_fiber .allocatedSlice ());
}
thread .io_uring .deinit ();
}
fn currentFiber (thread : *Thread ) *Fiber {
assert (thread .current_context != &thread .idle_context );
return @fieldParentPtr ("context" , thread .current_context );
}
fn enqueue (thread : *Thread ) *linux .io_uring_sqe {
while (true ) return thread .io_uring .get_sqe () catch {
thread .submit ();
continue ;
};
}
fn submit (thread : *Thread ) void {
_ = thread .io_uring .submit () catch |err | switch (err ) {
error .SignalInterrupt => {},
else => |e | @panic (@errorName (e )),
};
}
const List = struct {
allocated : []Thread ,
reserved : u32 ,
active : u32 ,
};
}