如何在vala中创建线程安全的单例?

Nam*_*arl 4 glib vala

我想为我的 vala 类创建一个线程安全的单例实例。

如您所知,如果未正确实现,单例可能会导致线程问题。

gav*_*avr 6

您还可以使用 SingleInstance Code 属性。它会自动为您做同样的事情!

[SingleInstance]
public class ExampleClass : Object {
    public int prop { get; set; default = 42; }
    public ExampleClass () {
        // ...
    }
}

int main (string[] args) {
    var a = new ExampleClass (); // the two refs
    var b = new ExampleClass (); // are the same
    b.prop += 1;
    assert (a.prop == b.prop);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

请注意,在这种情况下,您不需要调用静态函数,例如instance()or get_instance()。只需通过创建一个对象new即可为您提供对单例的引用。