【发布时间】:2023-04-06 21:14:02
【问题描述】:
我有一个要添加元素的 GLib.List。
我想使用多个 GLib.Threads 同时添加这些元素
我正在尝试使用 GLib.Mutex 同步对列表的访问。同步似乎有效,但没有添加任何元素。
public static void main() {
var list = new GLib.List<string>();
var mutex = GLib.Mutex();
var workerA = new Worker("A", list, mutex);
var workerB = new Worker("B", list, mutex);
var workerC = new Worker("C", list, mutex);
GLib.Thread<void*> tA = new GLib.Thread<void*>("WorkerThread", workerA.run);
GLib.Thread<void*> tB = new GLib.Thread<void*>("WorkerThread", workerB.run);
GLib.Thread<void*> tC = new GLib.Thread<void*>("WorkerThread", workerC.run);
tA.join();
tB.join();
tC.join();
stdout.printf("List:\n");
foreach (string str in list) {
stdout.printf(" - %s\n", str);
}
}
class Worker : GLib.Object {
private string name;
private weak GLib.List<string> list;
private weak GLib.Mutex mutex;
public Worker(string name, GLib.List<string> list, GLib.Mutex mutex) {
this.name = name;
this.list = list;
this.mutex = mutex;
}
public void* run() {
mutex.lock();
list.append(name);
mutex.unlock();
return null;
}
}
当我查看同步部分时,它似乎工作正常(即使有更多线程),但没有元素被添加到列表中!
输出:
列表:
谁能告诉我怎么做?
【问题讨论】:
标签: multithreading glib vala