Многопоточность
Поток (thread) в языке Vala не определяется во время компиляции, это просто фрагмент кода, который программа во время выполнения будет пытаться выполнить как новый поток. Многопоточность реализована с помощью статических функций класса Thread из библиотеки GLib. Рассмотрим небольшой и очень простой пример.
using GLib;
public class MyThread : GLib.Object
{
public static void * thread_fun()
{
stdout.printf( "Поток активизирован... \n" );
return null;
}
public static int main( string [] args )
{
if( !Thread.supported() )
{
stdout.printf( "Без поддержки потоков выполнение невозможно \n" );
return -1;
}
try
{
Thread.create( thread_fun, false );
}
catch( ThreadError ex )
{
return -1;
}
return 0;
}
}
При компиляции необходимо подключить поддержку многопоточности, используя соответствующий ключ:
valac --thread -o thread-test mythread.vala
Отметим, что исходный код был сохранён в файл mythread.vala, а для конечного выполняемого файла задано другое имя (thread-test) с помощью ключа -o
.
Результат работы программы показан на рисунке 1.

Этот пример демонстрирует лишь возможность работы с потоками при программировании на языке Vala. В рамках данной статьи невозможно рассмотреть все аспекты и проблемы многопоточности: синхронизацию, кооперацию потоков и т.д.
Last updated
Was this helpful?