У меня есть 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;
}
}
Когда я смотрю на часть синхронизации, кажется, что она работает правильно (даже с большим количеством потоков), но элементы не добавляются в список!
Выход:
Список:
Может кто-нибудь, пожалуйста, скажите мне, как это сделать?