Я пытаюсь использовать GLib.ThreadPool
s в Vala, но после поиска в Google Code и существующей документации я не могу найти хороших примеров их использования. Мои собственные попытки их использования приводят к необработанным GLib.ThreadError
с.
Например, рассмотрим следующие 26 строк, которые связывают умножение целочисленных диапазонов.
threaded_multiply.vala
class Range {
public int low;
public int high;
public Range(int low, int high) {
this.low = low;
this.high = high;
}
}
void multiply_range(Range r) {
int product = 1;
for (int i=r.low; i<=r.high; i++)
product = product * i;
print("range(%s, %s) = %s\n",
r.low.to_string(), r.high.to_string(), product.to_string());
}
void main() {
ThreadPool<Range> threads;
threads = new ThreadPool<Range>((Func<Range>)multiply_range, 4, true);
for (int i=1; i<=10; i++)
threads.push(new Range(i, i+5));
}
Компиляция их с valac --thread threaded_multipy.vala
работает нормально ... но выдает мне предупреждения. Учитывая опасность многопоточности, это заставляет меня думать, что я делаю что-то не так, и может в конечном итоге взорваться мне в лицо.
Кто-нибудь знает, как правильно использовать GLib.ThreadPool
? Спасибо за чтение, и еще раз спасибо, если у вас есть ответ.
edit : Я подумал, что это может быть из-за моего компилятора, но нет, Thread.supported()
оценивает здесь как true.