Многопоточность

Поток (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