Struct ruru::Thread [] [src]

pub struct Thread { /* fields omitted */ }

Thread

Methods

impl Thread
[src]

Creates a new green thread.

The returning value of the closure will be available as #value of the thread

Examples

use ruru::{Fixnum, Thread, VM};

Thread::new(|| {
    let computation_result = 1 + 2;

    Fixnum::new(computation_result)
});

Ruby:

Thread.new do
  computation_result = 1 + 2

  computation_result
end

Tells scheduler to switch to other threads while current thread is waiting for a readable event on the given file descriptor.

Examples

use std::os::unix::io::AsRawFd;
use std::os::unix::net::UnixStream;

use ruru::{Thread, VM};

let (unix_socket, _) = UnixStream::pair().unwrap();

Thread::wait_fd(unix_socket.as_raw_fd());

Release GVL for current thread.

Warning! Due to MRI limitations, interaction with Ruby objects is not allowed while GVL is released, it may cause unexpected behaviour. Read more at Ruby documentation

You should extract all the information from Ruby world before invoking thread_call_without_gvl.

GVL will be re-acquired when the closure is finished.

Examples

#[macro_use] extern crate ruru;

use ruru::{Class, Fixnum, Object, Thread};

class!(Calculator);

methods!(
    Calculator,
    itself,

    fn heavy_computation() -> Fixnum {
        let computation = || { 2 * 2 };
        let unblocking_function = || {};

        // release GVL for current thread until `computation` is completed
        let result = Thread::call_without_gvl(
            computation,
            Some(unblocking_function)
        );

        // GVL is re-acquired, we can interact with Ruby-world
        Fixnum::new(result)
    }
);

fn main() {
    Class::new("Calculator", None).define(|itself| {
        itself.def("heavy_computation", heavy_computation);
    });
}

Trait Implementations

impl Debug for Thread
[src]

Formats the value using the given formatter.

impl PartialEq for Thread
[src]

This method tests for self and other values to be equal, and is used by ==. Read more

This method tests for !=.

impl From<Value> for Thread
[src]

Performs the conversion.

impl Object for Thread
[src]

Returns internal value of current object. Read more

Returns a class of current object. Read more

Returns a singleton class of current object. Read more

Gets a Rust structure that is wrapped into a Ruby object. Read more

Wraps calls to the object. Read more

Defines an instance method for the given class or object. Read more

Defines a class method for given class or singleton method for object. Read more

An alias for define_method (similar to Ruby syntax def some_method).

An alias for define_singleton_method (similar to Ruby def self.some_method).

Calls a given method on an object similarly to Ruby Object#send method Read more

Checks whether the object responds to given method Read more

Checks whether the object is nil Read more

Converts struct to AnyObject Read more

Gets an instance variable of object Read more

Sets an instance variable for object Read more

Returns the freeze status of the object. Read more

Prevents further modifications to the object. Read more

Unsafely casts current object to the specified Ruby type Read more

Safely casts current object to the specified Ruby type Read more

Determines the value type of the object Read more

impl VerifiedObject for Thread
[src]