> For the complete documentation index, see [llms.txt](https://nim-ru-tutorial.gitbook.io/ibm-vala-guide/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://nim-ru-tutorial.gitbook.io/ibm-vala-guide/chast-3.-rasshirennye-vozmozhnosti-yazyka-vala/mnogopotochnost.md).

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

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

![ Рисунок 1. Выполнение многопоточной программы](/files/-LfM99lMXLA71wqacs4u)

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